我使用Facebook JSSDK(即客户端)来验证我的网络应用程序的当前用户是谁。
代码看起来像这样:
... inited google analytics ...
...
//events *before* authentication
_gaq.push(['_trackEvent', 'TEST', 'EVENT BEFORE AUTH', 1]);
...
//events *after* attempt at client-side authentication
// callback might return after, say, 7 seconds
authenticateUser(function(userInfo) {
// setting visitor-level custom var
_gaq.push(['_setCustomVar', 1, 'AUTHED-USER', userInfo, 1]);
_gaq.push(['_trackEvent', 'TEST', 'EVENT AFTER AUTH', 1]);
});
(如果你尝试模拟这个,请确保你在第一个事件发生后很长一段时间运行“setCustomVar” - 因为你想给GA“足够的时间”来发送第一个事件)
这会在自定义变量下创建跟踪事件的以下“问题”:
来自Facebook的回复,用户的信息可能会在其他事件已发送到Google Analytics之后返回 - 访问者级别的自定义变量似乎“解决了这个问题”,因为它似乎甚至是之前跟踪过的事件此会话(在设置自定义var之前)列在自定义var值(在其后面设置)的“下面”。
其他用户可能会使用同一浏览器来使用该应用。 “覆盖”访问者级自定义变量的行为是有问题的 - 似乎从此浏览器发出的所有pre-auth事件都在LATEST custom-var值下列出/分组。我尝试在覆盖之前发出_deleteCustomVar调用 - 但这并没有解决问题。
以不同方式“解决”第一个问题 - 我想过没有使用访问者级别的自定义var(而是使用页面/会话) - 但这意味着所有pre-auth事件都不会列在自定义下var - 要解决这个我想以某种方式将所有事件跟踪推迟到之后 auth已经完成 - 但这似乎......嗯......很奇怪。
另一个解决方案是使用我自己的“访客cookie”。但是GA已经做到了这一点,所以我不愿重新发明轮子......(并且在用户切换之后,访问者的cookie将对于预认证事件“撒谎”)
有关如何解决此问题的任何建议?
答案 0 :(得分:4)
可能对每个customVar范围的一点解释都会对您有所帮助。
访客级别简历
从您设置简历的那一刻起,访客级别的简历将适用于所有访问。如果您在单次访问期间更改了该访问,则该访问将在旧值下的GA中列出,但将来的访问将具有更新的CV。
会话级别CV
会话级CV仅在当前会话中有效。在未来的会议中,它是空的。如果您在访问期间更改了会话级别的CV,则GA中报告的值是最后一个。
https://developers.google.com/analytics/devguides/collection/gajs/gaTrackingCustomVariables#usage
会话中调用的最后一个会话级变量是使用的变量 为那届会议。示例:如果对于插槽#1,则为login = false 在会话开始时,对于插槽#1,login = true,即 登录时会话设置为true。
覆盖任何先前设置的页面级变量 会话。示例:如果插槽#1首先用于category = sports和 然后对于会话,对于login = true,category = sports不会 记录在那个会话中。
页面级别CV
在你的情况下你必须小心这个。当您使用Page Level CV永远不会将访问视为指标时,请始终使用综合浏览量(如果您在设置CV后立即触发事件,则使用totalEvens)。
使用哪一个?
现在回答你的问题。我首先会问自己是否有任何理由相信多个用户会使用相同的浏览器。我见过为计算机等信息亭制作的系统,在这种情况下,它是一个完全有效的点。但是,除了您可能使用相同浏览器的大量用户可能与您的指标无关。
即使在使用相同浏览器的情况下如果您使用会话级别的CV,它将始终为空,直到用户设置它,如果他在访问期间更改它,您将得到一个可能是您想要的lates 。使用会话级别CV的唯一不利方面是,如果用户从未登录,则您将没有该访问的简历。
因此,如果您有任何理由相信您的受众群体很有可能与多个用户共享相同的浏览器,那么我会使用会话级别的CV。否则我会保留一个用户级别的CV,因为该值的变化机会很小,因此即使用户决定在特定访问期间不登录,您也会有CV。
<强> PS 强>
我不知道代码中的事件是否仅仅是示例,但它们是错误的。事件中的前3个参数是字符串,似乎你传递了2个字符串和一个整数。
在设置简历后,您确定需要事件或综合浏览量,设置简历不会向GA发送匹配,因此严格要求您发送匹配。如果您只是为了注册简历而发送活动,您最好发送如下事件:
_gaq.push(['_trackEvent', 'CV', 'set', '', 0, true]);
这将触发非交互式事件,并且不会影响跳出率等指标。
答案 1 :(得分:0)
所以谷歌考虑过这个问题,但认为这不是那么重要:
...同样,如果两个不同的浏览器使用相同的浏览器 访问者,但每个活动都有一个单独的计算机帐户 将记录在两个唯一的访客ID下。另一方面,如果 浏览器碰巧被两个不同的人共享使用 相同的计算机帐户,即使记录了一个唯一的访客ID 两个独特的人访问了该网站。
我确实找到了一个解决方案:在加载GA之前删除__utma cookie。