I’m trying to track user types at the session scope using custom variables. On each page load I want to check if the GA variable exists and if not set it to one of 3 values based on a cookie (visitor, register, premium).
TrackUser: function () {
var index = 5; //slot 5
var scope = 2; //set scope to session level
var key = "UserType";
var value;
if (_gaq != undefined) {
_gaq.push(function () { //this is async
var pageTracker = _gat._getTrackerByName(); //Gets the default tracker.
var vis = pageTracker._getVisitorCustomVar(5); //this should return the 'usertype' if its been set
//if no GA variable exists then lets set it
if (vis == undefined) { // !? THIS IS ALWAYS 'undefined' ?!
value = getUserType(); //get the users type
//send custom var to GA
_gaq.push(['_setCustomVar',
index, // This custom var is set to slot #1. Required parameter.
key, // The name acts as a kind of category for the user activity. Required parameter.
value, // This value of the custom variable. Required parameter.
scope // Sets the scope to session-level. Optional parameter.
]);
}
});
}
}
This function is being called right before a track event push ‘_trackEvent’ so it may be that its not finishing before ‘_trackEvent’ is called. Even so, wouldn’t it get sent on the next page load?
Or am I misunderstanding how GA uses cookies with Custom Vars?
BTW: if there is an easier way to get the custom variable (maybe without having to send a request to Google) that would be ideal.
Update
Upon reading more documentation I’ve realized that ‘_getVisitorCustomVar’ only returns custom variables if they are set at the ‘visitor scope’ (3). Google apparently tracks ‘session scope’ (2) variables on their server and doesn’t set client side cookies. Until I can find a more elegant solution I’m just setting a session cookie of my own to check if I have sent information to GA about the user type.
It is only possible to get ‘Visitor Scope’ values from googles API call
_getVisitorCustomVar