Update Tracker.trackEvent

Mechanics have changed a bit: first param is an action string, second
param has specific properties if Google Analytics.
Updating some of the trackEvent calls to use correct actions and
categories.
This commit is contained in:
Matt Lott 2014-11-28 15:05:34 -05:00
parent 6cb46aafa8
commit fc2c68a7af
7 changed files with 34 additions and 23 deletions

View file

@ -78,14 +78,14 @@ module.exports = class LevelSetupManager extends CocoClass
@inventoryModal.didReappear()
@inventoryModal.onShown()
@inventoryModal.setHero(e.hero)
window.tracker?.trackEvent 'Play Level Modal', Action: 'Choose Inventory', ['Google Analytics']
window.tracker?.trackEvent 'Choose Inventory', category: 'Play Level', ['Google Analytics']
onChooseHeroClicked: ->
@options.parent.openModalView(@heroesModal)
@heroesModal.render()
@heroesModal.didReappear()
@inventoryModal.endHighlight()
window.tracker?.trackEvent 'Play Level Modal', Action: 'Choose Hero', ['Google Analytics']
window.tracker?.trackEvent 'Change Hero', category: 'Play Level', ['Google Analytics']
onInventoryModalPlayClicked: ->
@navigatingToPlay = true

View file

@ -25,18 +25,29 @@ module.exports = class Tracker
console.log 'Going to track visit for', "/#{url}" if debugAnalytics
analytics.pageview "/#{url}"
trackEvent: (event, properties, includeProviders=null) =>
console.log 'Would track analytics event:', event, properties if debugAnalytics
trackEvent: (action, properties, includeProviders=null) =>
# 'action' is a string
# Google Analytics properties format: {category: 'Account', label: 'Premium', value: 50 }
# https://segment.com/docs/integrations/google-analytics/#track
# https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide#Anatomy
# Mixpanel properties format: whatever you want unlike GA
# https://segment.com/docs/integrations/mixpanel/
console.log 'Would track analytics event:', action, properties if debugAnalytics
return unless me and @isProduction and analytics? and not me.isAdmin()
console.log 'Going to track analytics event:', event, properties if debugAnalytics
console.log 'Going to track analytics event:', action, properties if debugAnalytics
properties = properties or {}
context = {}
# TODO: Restrict providers, if given includeProviders
# TODO: This method may not work anymore, because it is not referenced in the segment.io docs
# TODO: Can double check in Mixpanel
# TODO: https://segment.com/docs/api/tracking/track/
if includeProviders
context.providers = {'All': false}
for provider in includeProviders
context.providers[provider] = true
event.label = properties.label if properties.label
analytics?.track event, properties, context
analytics?.track action, properties, context
trackTiming: (duration, category, variable, label, samplePercentage=5) ->
# https://developers.google.com/analytics/devguides/collection/gajs/gaTrackingTiming

View file

@ -15,7 +15,7 @@ module.exports = class HomeView extends RootView
constructor: ->
super()
window.tracker?.trackEvent 'Homepage', Action: 'Loaded'
window.tracker?.trackEvent 'Homepage Loaded', category: 'Homepage', ['Google Analytics']
if not me.get('hourOfCode') and @getQueryVariable 'hour_of_code'
@setUpHourOfCode()
elapsed = (new Date() - new Date(me.get('dateCreated')))
@ -41,7 +41,7 @@ module.exports = class HomeView extends RootView
@playSound 'menu-button-click'
e.preventDefault()
e.stopImmediatePropagation()
window.tracker?.trackEvent 'Homepage', Action: 'Play'
window.tracker?.trackEvent 'Click Play', category: 'Homepage'
window.open '/play', '_blank'
afterInsert: ->

View file

@ -428,7 +428,7 @@ module.exports = class InventoryModal extends ModalView
hasGoneFullScreenOnce = true
@updateConfig =>
@trigger? 'play-click'
window.tracker?.trackEvent 'Play Level Modal', Action: 'Play', ['Google Analytics']
window.tracker?.trackEvent 'Inventory Play', category: 'Play Level', ['Google Analytics']
updateConfig: (callback, skipSessionSave) ->
sessionHeroConfig = @options.session.get('heroConfig') ? {}

View file

@ -47,7 +47,7 @@ module.exports = class RootView extends CocoView
logoutAccount: ->
Backbone.Mediator.publish("auth:logging-out")
window.tracker?.trackEvent 'Homepage', Action: 'Log Out' if @id is 'home-view'
window.tracker?.trackEvent 'Log Out', category:'Homepage', ['Google Analytics'] if @id is 'home-view'
logoutUser($('#login-email').val())
showWizardSettingsModal: ->
@ -57,18 +57,18 @@ module.exports = class RootView extends CocoView
onClickSignupButton: ->
AuthModal = require 'views/modal/AuthModal'
window.tracker?.trackEvent 'Homepage', Action: 'Signup Modal' if @id is 'home-view'
window.tracker?.trackEvent 'Sign Up', category: 'Homepage', ['Google Analytics'] if @id is 'home-view'
@openModalView new AuthModal {mode: 'signup'}
onClickLoginButton: ->
AuthModal = require 'views/modal/AuthModal'
window.tracker?.trackEvent 'Homepage', Action: 'Login Modal' if @id is 'home-view'
window.tracker?.trackEvent 'Login', category: 'Homepage', ['Google Analytics'] if @id is 'home-view'
@openModalView new AuthModal {mode: 'login'}
onClickAnchor: (e) ->
return if @destroyed
anchorText = e?.currentTarget?.text
window.tracker?.trackEvent 'Homepage', Action: anchorText, ['Google Analytics'] if @id is 'home-view' and anchorText
window.tracker?.trackEvent anchorText, category: 'Homepage', ['Google Analytics'] if @id is 'home-view' and anchorText
@toggleModal e
onOpenModalView: (e) ->

View file

@ -70,7 +70,7 @@ module.exports = class WorldMapView extends RootView
@hadEverChosenHero = me.get('heroConfig')?.thangType
@listenTo me, 'change:purchased', -> @renderSelectors('#gems-count')
@listenTo me, 'change:spent', -> @renderSelectors('#gems-count')
window.tracker?.trackEvent 'World Map', Action: 'Loaded', ['Google Analytics']
window.tracker?.trackEvent 'Loaded World Map', category: 'World Map', ['Google Analytics']
# If it's a new player who didn't appear to come from Hour of Code, we register her here without setting the hourOfCode property.
elapsed = (new Date() - new Date(me.get('dateCreated')))
@ -192,12 +192,12 @@ module.exports = class WorldMapView extends RootView
levelElement = $(e.target).parents('.level')
levelID = levelElement.data('level-id')
@startLevel levelElement
window.tracker?.trackEvent 'World Map', Action: 'Play Level', levelID: levelID, ['Google Analytics']
window.tracker?.trackEvent 'Clicked Level', category: 'World Map', levelID: levelID, ['Google Analytics']
onClickStartLevel: (e) ->
levelElement = $(e.target).parents('.level-info-container')
@startLevel levelElement
window.tracker?.trackEvent 'World Map', Action: 'Play Level', levelID: levelElement.data('level-id'), ['Google Analytics']
window.tracker?.trackEvent 'Clicked Start Level', category: 'World Map', levelID: levelElement.data('level-id'), ['Google Analytics']
startLevel: (levelElement) ->
@setupManager?.destroy()

View file

@ -110,7 +110,7 @@ module.exports = class PlayLevelView extends RootView
setTimeout f, 100
else
@load()
application.tracker?.trackEvent 'Started Level Load', level: @levelID, label: @levelID, ['Google Analytics']
application.tracker?.trackEvent 'Started Level Load', category: 'Play Level', level: @levelID, label: @levelID, ['Google Analytics']
setLevel: (@level, givenSupermodel) ->
@supermodel.models = givenSupermodel.models
@ -135,9 +135,8 @@ module.exports = class PlayLevelView extends RootView
@loadEndTime = new Date()
loadDuration = @loadEndTime - @loadStartTime
console.debug "Level unveiled after #{(loadDuration / 1000).toFixed(2)}s"
application.tracker?.trackEvent 'Finished Level Load', level: @levelID, label: @levelID, loadDuration: loadDuration, ['Google Analytics']
application.tracker?.trackEvent 'Finished Level Load', category: 'Play Level', label: @levelID, level: @levelID, loadDuration: loadDuration, ['Google Analytics']
application.tracker?.trackTiming loadDuration, 'Level Load Time', @levelID, @levelID
application.tracker?.trackEvent 'Play Level', Action: 'Loaded', levelID: @levelID
# CocoView overridden methods ###############################################
@ -338,7 +337,7 @@ module.exports = class PlayLevelView extends RootView
if @options.realTimeMultiplayerSessionID?
Backbone.Mediator.publish 'playback:real-time-playback-waiting', {}
@realTimeMultiplayerContinueGame @options.realTimeMultiplayerSessionID
application.tracker?.trackEvent 'Play Level', Action: 'Start Level', levelID: @levelID
application.tracker?.trackEvent 'Started Level', category:'Play Level', levelID: @levelID
playAmbientSound: ->
return if @ambientSound
@ -421,6 +420,7 @@ module.exports = class PlayLevelView extends RootView
victoryTime = (new Date()) - @loadEndTime
if victoryTime > 10 * 1000 # Don't track it if we're reloading an already-beaten level
application.tracker?.trackEvent 'Saw Victory',
category: 'Play Level'
level: @level.get('name')
label: @level.get('name')
application.tracker?.trackTiming victoryTime, 'Level Victory Time', @levelID, @levelID, 100
@ -438,12 +438,12 @@ module.exports = class PlayLevelView extends RootView
@tome.reloadAllCode()
Backbone.Mediator.publish 'level:restarted', {}
$('#level-done-button', @$el).hide()
application.tracker?.trackEvent 'Confirmed Restart', level: @level.get('name'), label: @level.get('name')
application.tracker?.trackEvent 'Confirmed Restart', category: 'Play Level', level: @level.get('name'), label: @level.get('name')
onInfiniteLoop: (e) ->
return unless e.firstWorld
@openModalView new InfiniteLoopModal()
application.tracker?.trackEvent 'Saw Initial Infinite Loop', level: @level.get('name'), label: @level.get('name')
application.tracker?.trackEvent 'Saw Initial Infinite Loop', category: 'Play Level', level: @level.get('name'), label: @level.get('name')
onPlayNextLevel: ->
nextLevelID = @getNextLevelID()