我使用 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“足够的时间”来发送第一个事件)
这会在自定义变量下创建以下跟踪事件的“问题”:
在其他事件已经发送到 Google Analytics 之后,来自 Facebook 的响应以及用户信息可能会返回 - 访问者级别的自定义变量似乎“解决了这个问题”,因为它似乎甚至是之前在此会话中跟踪的事件(在自定义之前var 已设置)列在自定义 var 值(在它们之后设置)的“下方”。
不同的用户可能会使用相同的浏览器来使用该应用程序。“覆盖”访问者级自定义变量的行为是有问题的 - 似乎从此浏览器发出的所有预授权事件都列在 LATEST custom-var 值下/分组。我尝试在覆盖之前发出 _deleteCustomVar 调用 - 但这并没有解决问题。
以不同的方式“解决”第一个问题 - 我想不使用访问者级别的自定义 var(而是页面/会话) - 但这意味着所有预授权事件都不会列在自定义 var 下 - 到解决这个问题,我想以某种方式将所有事件跟踪推迟到身份验证完成后- 但这似乎.. umm.. 很奇怪。
另一种解决方案是使用我自己的“visitor-cookie”。但是 GA 已经这样做了,所以我不愿意重新发明轮子..(而且在用户切换之后,访问者的 cookie 将为预授权事件“撒谎”)
关于如何处理这种情况的任何建议?