使用谷歌分析跟踪离线事件

9
我尝试追踪用户在我的网站上的活动,例如点击或鼠标悬停以及其他类型的事件...是否有解决方案可以追踪用户离线工作时的事件...我能否将它们存储在类似 cookie 的东西中,并在找到活动的互联网连接时将它们发送到服务器?这是可能的吗?
谢谢。
5个回答

15

取决于您要针对哪些浏览器类型。这些是用于HTML5离线Web应用程序吗?

如果它们支持ononlineonoffline事件,您可以相当轻松地自己实现这个功能。

以下是一些可行的代码,使用离线事件、本机JSON和HTML5本地存储:

if(!localStorage.getItem("offlineGA")){
  localStorage.setItem("offlineGA","[]");
}
var _ogaq = {
push : function(arr){
    if(navigator.onLine || !("onLine" in navigator)){ // if online or if browser doesn't support onLine/offLine detection.
        _gaq.push(arr);
    }
    else{
     var stored = JSON.parse(localStorage.getItem("offlineGA"));
     stored.push(arr);
     localStorage.setItem("offlineGA", JSON.stringify(stored));
    }
}
};

$(window).bind("online", function(){ // if you don't have jQuery, you can do window.ononline instead
   _gaq.push( JSON.parse(localStorage.getItem("offlineGA")) );
   localStorage.setItem("offlineGA","[]"); //empty it
});

那么您只需将_ogaq用作_gaq的包装器。

例如:

_ogaq.push(["_trackEvent","Category", "Action"]);

2
如果您在短时间内尝试向GA发送超过10个请求,它将被丢弃,只有前10个请求会被发送。这意味着,对于此代码,如果您离线时间太长并查询了超过10个事件/页面浏览量,则一旦您上线,只有前100个请求实际上会发送到GA。 - Eduardo
哦,好主意。我会添加setInterval循环以错开速率逐个处理它们 :) - Yahel
1
另外,需要注意的是,Google Analytics 跟踪的不仅仅是简单的事件:还包括事件发生的时间以及其他与会话相关的内容,这些内容在用户重新联网时可能已经消失或失去上下文。真正的解决方案是在用户重新联网时生成实际的图像信标代码,并嵌入这些图像...我会尝试想出一个解决方案。 - Ryan Wheale
有人已经开发了一个全功能的离线GA支持库吗?考虑到所有这些评论? - Nicolas Hoizey

3
另一个需要考虑的问题是,记录下来的时间将是数据发送的时间,而不是在设备上本地收集的时间。然而,现在有一种方法可以通过测量协议和qt参数(队列时间)避免这成为问题,它允许您以毫秒为单位发送事件/视图等的年龄。我已经在实时查看器中尝试过了,它确实按预期显示为记录的时间。请参阅以下链接了解更多信息:https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#qt。虽然这是一个老问题,但它在这个周末一直困扰着我。

2

1
根据这个文章,Google离线支持离线行为。您只需添加这些库即可。
    npm install --save-dev sw-offline-google-analytics
    ...
    importScripts('path/to/offline-google-analytics-import.js');
    goog.offlineGoogleAnalytics.initialize();

0

对我来说没有用,所以我发现,GA数组推送没有正确工作。 于是我循环了数组,将每个条目推送到Google Analytics。现在它像魔法一样正常运行...

$(window).bind("online", function(){ // if you don't have jQuery, you can do window.ononline instead

   var json = JSON.parse(localStorage.getItem("offlineGA"));

   for(var i = 0; i < json.length; i++) {    
        _ogaq.push([json[i][0],json[i][1], json[i][2]]);
    }

   localStorage.setItem("offlineGA","[]"); //empty it
   var json = "";
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接