summaryrefslogtreecommitdiff
path: root/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m
diff options
context:
space:
mode:
Diffstat (limited to 'StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m')
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m543
1 files changed, 543 insertions, 0 deletions
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m
new file mode 100644
index 00000000..12355da6
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m
@@ -0,0 +1,543 @@
+//UniversalAnalyticsPlugin.m
+//Created by Daniel Wilson 2013-09-19
+
+#import "UniversalAnalyticsPlugin.h"
+#import "GAI.h"
+#import "GAIDictionaryBuilder.h"
+#import "GAIFields.h"
+
+@implementation UniversalAnalyticsPlugin
+
+- (void) pluginInitialize
+{
+ _debugMode = false;
+ _trackerStarted = false;
+ _customDimensions = nil;
+}
+
+- (void) startTrackerWithId: (CDVInvokedUrlCommand*)command
+{
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSString* accountId = [command.arguments objectAtIndex:0];
+ NSNumber* dispatchPeriod = [command.arguments objectAtIndex:1];
+
+ if ([dispatchPeriod isKindOfClass:[NSNumber class]])
+ [GAI sharedInstance].dispatchInterval = [dispatchPeriod doubleValue];
+ else
+ [GAI sharedInstance].dispatchInterval = 30;
+
+ [[GAI sharedInstance] trackerWithTrackingId:accountId];
+
+ _trackerStarted = true;
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+ /* NSLog(@"successfully started GAI tracker"); */
+}
+
+- (void) setAllowIDFACollection: (CDVInvokedUrlCommand*) command
+{
+ CDVPluginResult* pluginResult = nil;
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ tracker.allowIDFACollection = [[command argumentAtIndex:0 withDefault:@(NO)] boolValue];
+}
+
+- (void) addCustomDimensionsToTracker: (id<GAITracker>)tracker
+{
+ if (_customDimensions) {
+ for (NSString *key in _customDimensions.allKeys) {
+ NSString *value = [_customDimensions objectForKey:key];
+
+ NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
+ f.numberStyle = NSNumberFormatterDecimalStyle;
+ NSNumber *myKey = [f numberFromString:key];
+
+ /* NSLog(@"Setting tracker dimension slot %@: <%@>", key, value); */
+ [tracker set:[GAIFields customDimensionForIndex:myKey.unsignedIntegerValue]
+ value:value];
+ }
+ }
+}
+
+- (void) getVar: (CDVInvokedUrlCommand*) command
+{
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ NSString* parameterName = [command.arguments objectAtIndex:0];
+ NSString* result = [tracker get:parameterName];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:result];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) setVar: (CDVInvokedUrlCommand*) command
+{
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ NSString* parameterName = [command.arguments objectAtIndex:0];
+ NSString* parameter = [command.arguments objectAtIndex:1];
+ [tracker set:parameterName value:parameter];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) dispatch: (CDVInvokedUrlCommand*) command
+{
+ [[GAI sharedInstance] dispatch];
+}
+
+- (void) debugMode: (CDVInvokedUrlCommand*) command
+{
+ _debugMode = true;
+ [[GAI sharedInstance].logger setLogLevel:kGAILogLevelVerbose];
+}
+
+- (void) setUserId: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ NSString* userId = [command.arguments objectAtIndex:0];
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ [tracker set:@"&uid" value: userId];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) setAnonymizeIp: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ NSString* anonymize = [command.arguments objectAtIndex:0];
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ [tracker set:kGAIAnonymizeIp value:anonymize];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) setOptOut: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ bool optout = [[command.arguments objectAtIndex:0] boolValue];
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [[GAI sharedInstance] setOptOut:optout];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) setAppVersion: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ NSString* version = [command.arguments objectAtIndex:0];
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ [tracker set:@"&av" value: version];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) enableUncaughtExceptionReporting: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ bool enabled = [[command.arguments objectAtIndex:0] boolValue];
+ [[GAI sharedInstance] setTrackUncaughtExceptions:enabled];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) addCustomDimension: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ NSNumber* key = [command.arguments objectAtIndex:0];
+ NSString* value = [command.arguments objectAtIndex:1];
+
+ if ( ! _customDimensions) {
+ _customDimensions = [[NSMutableDictionary alloc] init];
+ }
+
+ _customDimensions[key.stringValue] = value;
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) trackMetric: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSNumber *key = nil;
+ NSString *value = nil;
+
+ if ([command.arguments count] > 0)
+ key = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ value = [command.arguments objectAtIndex:1];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+ [tracker set:[GAIFields customMetricForIndex:[key intValue]] value:value];
+
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) trackEvent: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSString *category = nil;
+ NSString *action = nil;
+ NSString *label = nil;
+ NSNumber *value = nil;
+
+ if ([command.arguments count] > 0)
+ category = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ action = [command.arguments objectAtIndex:1];
+
+ if ([command.arguments count] > 2)
+ label = [command.arguments objectAtIndex:2];
+
+ if ([command.arguments count] > 3)
+ value = [command.arguments objectAtIndex:3];
+
+ bool newSession = [[command argumentAtIndex:4 withDefault:@(NO)] boolValue];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+ [self addCustomDimensionsToTracker:tracker];
+
+ GAIDictionaryBuilder *builder = [GAIDictionaryBuilder
+ createEventWithCategory: category //required
+ action: action //required
+ label: label
+ value: value];
+ if(newSession){
+ [builder set:@"start" forKey:kGAISessionControl];
+ }
+ [tracker send:[builder build]];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+
+ }];
+
+}
+
+- (void) trackException: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSString *description = nil;
+ NSNumber *fatal = nil;
+
+ if ([command.arguments count] > 0)
+ description = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ fatal = [command.arguments objectAtIndex:1];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+ [self addCustomDimensionsToTracker:tracker];
+
+ [tracker send:[[GAIDictionaryBuilder createScreenView] build]];
+
+ [tracker send:[[GAIDictionaryBuilder
+ createExceptionWithDescription: description
+ withFatal: fatal] build]];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) trackView: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSString* screenName = [command.arguments objectAtIndex:0];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ [self addCustomDimensionsToTracker:tracker];
+
+ NSString* deepLinkUrl = [command.arguments objectAtIndex:1];
+ GAIDictionaryBuilder* openParams = [[GAIDictionaryBuilder alloc] init];
+
+ if (deepLinkUrl && deepLinkUrl != (NSString *)[NSNull null]) {
+ [[openParams setCampaignParametersFromUrl:deepLinkUrl] build];
+ }
+
+ bool newSession = [[command argumentAtIndex:2 withDefault:@(NO)] boolValue];
+ if(newSession){
+ [openParams set:@"start" forKey:kGAISessionControl];
+ }
+
+ NSDictionary *hitParamsDict = [openParams build];
+
+ [tracker set:kGAIScreenName value:screenName];
+ [tracker send:[[[GAIDictionaryBuilder createScreenView] setAll:hitParamsDict] build]];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) trackTiming: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+
+ NSString *category = nil;
+ NSNumber *intervalInMilliseconds = nil;
+ NSString *name = nil;
+ NSString *label = nil;
+
+ if ([command.arguments count] > 0)
+ category = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ intervalInMilliseconds = [command.arguments objectAtIndex:1];
+
+ if ([command.arguments count] > 2)
+ name = [command.arguments objectAtIndex:2];
+
+ if ([command.arguments count] > 3)
+ label = [command.arguments objectAtIndex:3];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+ [self addCustomDimensionsToTracker:tracker];
+
+ [tracker send:[[GAIDictionaryBuilder
+ createTimingWithCategory: category //required
+ interval: intervalInMilliseconds //required
+ name: name
+ label: label] build]];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) addTransaction: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+
+ NSString *transactionId = nil;
+ NSString *affiliation = nil;
+ NSNumber *revenue = nil;
+ NSNumber *tax = nil;
+ NSNumber *shipping = nil;
+ NSString *currencyCode = nil;
+
+
+ if ([command.arguments count] > 0)
+ transactionId = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ affiliation = [command.arguments objectAtIndex:1];
+
+ if ([command.arguments count] > 2)
+ revenue = [command.arguments objectAtIndex:2];
+
+ if ([command.arguments count] > 3)
+ tax = [command.arguments objectAtIndex:3];
+
+ if ([command.arguments count] > 4)
+ shipping = [command.arguments objectAtIndex:4];
+
+ if ([command.arguments count] > 5)
+ currencyCode = [command.arguments objectAtIndex:5];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+
+ [tracker send:[[GAIDictionaryBuilder createTransactionWithId:transactionId // (NSString) Transaction ID
+ affiliation:affiliation // (NSString) Affiliation
+ revenue:revenue // (NSNumber) Order revenue (including tax and shipping)
+ tax:tax // (NSNumber) Tax
+ shipping:shipping // (NSNumber) Shipping
+ currencyCode:currencyCode] build]]; // (NSString) Currency code
+
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+
+
+- (void) addTransactionItem: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+
+ CDVPluginResult* pluginResult = nil;
+ NSString *transactionId = nil;
+ NSString *name = nil;
+ NSString *sku = nil;
+ NSString *category = nil;
+ NSNumber *price = nil;
+ NSNumber *quantity = nil;
+ NSString *currencyCode = nil;
+
+
+ if ([command.arguments count] > 0)
+ transactionId = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ name = [command.arguments objectAtIndex:1];
+
+ if ([command.arguments count] > 2)
+ sku = [command.arguments objectAtIndex:2];
+
+ if ([command.arguments count] > 3)
+ category = [command.arguments objectAtIndex:3];
+
+ if ([command.arguments count] > 4)
+ price = [command.arguments objectAtIndex:4];
+
+ if ([command.arguments count] > 5)
+ quantity = [command.arguments objectAtIndex:5];
+
+ if ([command.arguments count] > 6)
+ currencyCode = [command.arguments objectAtIndex:6];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+
+ [tracker send:[[GAIDictionaryBuilder createItemWithTransactionId:transactionId // (NSString) Transaction ID
+ name:name // (NSString) Product Name
+ sku:sku // (NSString) Product SKU
+ category:category // (NSString) Product category
+ price:price // (NSNumber) Product price
+ quantity:quantity // (NSNumber) Product quantity
+ currencyCode:currencyCode] build]]; // (NSString) Currency code
+
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+@end