Skip to content

Commit

Permalink
Add campaign measurement tracking
Browse files Browse the repository at this point in the history
  • Loading branch information
victorsosa committed Aug 3, 2016
1 parent f943047 commit bd3e2bb
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 12 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ In your 'deviceready' handler, set up your Analytics tracker:
To track a Screen (PageView):
* `window.ga.trackView('Screen Title')`

To track a Screen (PageView) w/ campaign details:
* `window.ga.trackView('Screen Title', 'my-scheme://content/1111?utm_source=google&utm_campaign=my-campaign')`

To track an Event:
* `window.ga.trackEvent('Category', 'Action', 'Label', Value)` Label and Value are optional, Value is numeric

Expand Down
14 changes: 8 additions & 6 deletions android/UniversalAnalyticsPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,9 @@ public boolean execute(String action, JSONArray args, CallbackContext callbackCo
this.startTracker(id, callbackContext);
return true;
} else if (TRACK_VIEW.equals(action)) {
int length = args.length();
String screen = args.getString(0);
this.trackView(screen, callbackContext);
this.trackView(screen, length > 1 ? args.getString(1) : "", callbackContext);
return true;
} else if (TRACK_EVENT.equals(action)) {
int length = args.length();
Expand All @@ -75,10 +76,7 @@ public boolean execute(String action, JSONArray args, CallbackContext callbackCo
} else if (TRACK_METRIC.equals(action)) {
int length = args.length();
if (length > 0) {
this.trackMetric(
args.getInt(0),
length > 1 ? args.getString(1) : "",
callbackContext);
this.trackMetric(args.getInt(0), length > 1 ? args.getString(1) : "", callbackContext);
}
return true;
} else if (ADD_DIMENSION.equals(action)) {
Expand Down Expand Up @@ -180,7 +178,7 @@ private <T> void addCustomDimensionsToHitBuilder(T builder) {
}
}

private void trackView(String screenname, CallbackContext callbackContext) {
private void trackView(String screenname, String campaignUrl, CallbackContext callbackContext) {
if (! trackerStarted ) {
callbackContext.error("Tracker not started");
return;
Expand All @@ -192,6 +190,10 @@ private void trackView(String screenname, CallbackContext callbackContext) {
HitBuilders.ScreenViewBuilder hitBuilder = new HitBuilders.ScreenViewBuilder();
addCustomDimensionsToHitBuilder(hitBuilder);

if(!campaignUrl.equals("")){
hitBuilder.setCampaignParamsFromUrl(campaignUrl);
}

tracker.send(hitBuilder.build());
callbackContext.success("Track Screen: " + screenname);
} else {
Expand Down
22 changes: 20 additions & 2 deletions ios/UniversalAnalyticsPlugin.m
Original file line number Diff line number Diff line change
Expand Up @@ -275,8 +275,26 @@ - (void) trackView: (CDVInvokedUrlCommand*)command

id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
[self addCustomDimensionsToTracker:tracker];
[tracker set:kGAIScreenName value:screenName];
[tracker send:[[GAIDictionaryBuilder createScreenView] build]];

NSString* deepLinkUrl = [command.arguments objectAtIndex:1];
GAIDictionaryBuilder* openParams = [[GAIDictionaryBuilder alloc] init];

if (deepLinkUrl) {
[[openParams setCampaignParametersFromUrl:deepLinkUrl] build];
}

// Campaign source is the only required campaign field. If previous call
// did not set a campaign source, use the hostname as a referrer instead.
if(![openParams get:kGAICampaignSource] && [url host].length !=0) {
// Set campaign data on the map, not the tracker.
[openParams set:@"referrer" forKey:kGAICampaignMedium];
[openParams set:[url host] forKey:kGAICampaignSource];
}

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];
Expand Down
6 changes: 4 additions & 2 deletions plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
<header-file src="ios/UniversalAnalyticsPlugin.h" />
<source-file src="ios/UniversalAnalyticsPlugin.m" />
<source-file src="ios/libGoogleAnalyticsServices.a" framework="true" />
<source-file src="ios/libAdIdAccess.a" framework="true" />
<header-file src="ios/GAIDictionaryBuilder.h" />
<header-file src="ios/GAIFields.h" />
<header-file src="ios/GAILogger.h" />
Expand All @@ -38,6 +39,7 @@

<framework src="SystemConfiguration.framework" />
<framework src="CoreData.framework" />
<framework src="AdSupport.framework" />
<framework src="libz.dylib" />
<framework src="libsqlite3.dylib" />
</platform>
Expand All @@ -62,12 +64,12 @@
</intent-filter>
</receiver>
<service android:name="com.google.android.gms.analytics.AnalyticsService" android:enabled="true" android:exported="false"/>
<receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver" android:exported="true">
<receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
<service android:name="com.google.android.gms.analytics.CampaignTrackingService" />
<service android:name="com.google.android.gms.analytics.CampaignTrackingService" android:enabled="true" android:exported="false"/>
</config-file>
<source-file src="android/UniversalAnalyticsPlugin.java" target-dir="src/com/danielcwilson/plugins/analytics" />
</platform>
Expand Down
8 changes: 6 additions & 2 deletions www/analytics.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,12 @@ UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, e
cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]);
};

UniversalAnalyticsPlugin.prototype.trackView = function(screen, success, error) {
cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen]);
UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaingUrl, success, error) {
if (typeof campaingUrl === 'undefined' || campaingUrl === null) {
campaingUrl = '';
}

cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaingUrl]);
};

UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) {
Expand Down

0 comments on commit bd3e2bb

Please sign in to comment.