diff options
Diffstat (limited to 'StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js')
| -rw-r--r-- | StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js b/StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js new file mode 100644 index 00000000..6b789895 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js @@ -0,0 +1,121 @@ +define(function(require) { + + var Disposable = require('lavaca/util/Disposable'); + var Config = require('lavaca/util/Config'); + var Device = require('lavaca/env/Device'); + var ga = require('google-analytics'); + + var AnalyticsService = Disposable.extend(function AnalyticsService() { + Disposable.call(this); + this.appId = Config.get('google_analytics_id'); + this.webId = Config.get('google_analytics_web_id'); + this.isWeb = this.webId.length; + + if (!Device.isCordova() && this.isWeb) { + ga('create', this.webId); + } + + document.addEventListener('deviceready', this.init.bind(this), false); + }, { + ready: false, + queue: [], + isWeb: false, + //isApp: false, //TODO need to research when Device.isCordova() is valid in Lavaca load flow + init: function() { + if (Device.isCordova() && analytics) { + this.ready = true; + analytics.startTrackerWithId(this.appId); + this.processQueue(); + this.isWeb = false; + } + }, + trackView: function(screen) { + if (Device.isCordova()) { + if (this.ready) { + analytics.trackView(screen); + } else { + this.queue.push({ + action: 'trackView', + params: [screen] + }); + } + } else if (this.isWeb) { + ga('send', 'pageview', { + 'title': screen + }); + } + }, + setUserId: function() { + throw 'setUserId is not implemented for Lavaca'; + }, + setAnonymizeIp: function() { + throw 'setAnonymizeIp is not implemented for Lavaca'; + }, + setOptOut: function() { + throw 'setOptOut is not implemented for Lavaca'; + }, + setAppVersion: function() { + throw 'setAppVersion is not implemented for Lavaca'; + }, + debugMode: function() { + throw 'debugMode is not implemented for Lavaca'; + }, + trackEvent: function(category, action, label, value) { + action = action || ''; + label = label || ''; + value = value || 0; + if (Device.isCordova()) { + if (this.ready) { + analytics.trackEvent(category, action, label, value); + } else { + this.queue.push({ + action: 'trackEvent', + params: [category, action, label, value] + }); + } + } else if (this.isWeb) { + ga('send', { + 'hitType': 'event', + 'eventCategory': category, + 'eventAction': action, + 'eventLabel': label, + 'eventValue': value + }); + } + }, + trackTiming: function(category, intervalInMilliseconds, name, label) { + action = action || ''; + label = label || ''; + value = value || 0; + if (Device.isCordova()) { + if (this.ready) { + analytics.trackTiming(category, intervalInMilliseconds, name, label); + } else { + this.queue.push({ + action: 'trackTiming', + params: [category, intervalInMilliseconds, name, label] + }); + } + } else if (this.isWeb) { + ga('send', { + 'hitType': 'timing', + 'timingCategory': category, + 'timingValue': intervalInMilliseconds, + 'timingVar': name, + 'timingLabel': label + }); + } + }, + processQueue: function() { + if (this.queue) { + var emptyFunction = function() {}; + for (var i = 0; i < this.queue.length; ++i) { + cordova.exec(emptyFunction, emptyFunction, + 'UniversalAnalytics', this.queue[i].action, this.queue[i].params); + } + } + } + }); + + return new AnalyticsService(); +}); |
