61

我想使用 Google 的新测量协议从我的服务器而不是 JavaScript 发送跟踪事件。

此页面说需要客户端 ID: https ://developers.google.com/analytics/devguides/collection/protocol/v1/devguide#required

这个页面说它是可选的: https ://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#visitor

另外,这些文档中定义的格式是不同的——第一页给出了一个整数作为例子,只是说它是“一个唯一值”,而第二个链接说它应该是一个 UUID。

如果我在后端发送用户 ID 或生成的 UUID,Google 如何知道将该访问者链接到现有访问者会话?看来我需要检索 GA 对现有用户的内部引用。

任何帮助表示赞赏 - 谢谢!

4

3 回答 3

59

整数或 UUID

当您使用 javascript 跟踪时,cid它相当于 cookie 中的第二个值。_utma在 js 跟踪中,它是一个随机整数(由 生成Math.round(2147483647 * Math.random()))。但它是作为字符串存储和发送的:因此您可以使用两种格式(整数或 UUID)。

必需/可选

通过 js 跟踪,Analytics 服务器会忽略发送的缺少用户 ID 的请求。所以假设它是必需的。

将 Web 访问者与测量协议操作联系起来

如果您想将您的后端用户与之前使用 Analytics javascript 跟踪的访问者相关联ga.js,您可以从cookie中获取cid值。_utma但我不推荐它;每次更改(终端或浏览器更改、cookie 清理等)时,您将失去与客户先前操作的链接。

更新

analytics.js问问题时不存在。cid现在存储在 cookie 中_ga。您可以通过以下方式在 javascript 中获取它:

ga(function(tracker) {
  var clientId = tracker.get('clientId');
});

在撰写本文时,当您像上面的代码那样从跟踪器中获取 clientId 时,它不会给您一个 UUID,而是两个随机的 32 位整数,格式为“XY”。此实现将来可能会更改为 UUID。

或者用你自己的值设置它(比如后端生成的 UUID):

ga('create', 'UA-XXXXX-Y', {'clientId': 'your_client_id'});
于 2013-01-11T15:33:49.147 回答
6

在 Rails 中:

  def save_google_analytics_client_id
    if current_user && cookies["_ga"]
      client_id = cookies["_ga"].split(".").last(2).join(".")
      if current_user.google_analytics_client_id != client_id
        current_user.google_analytics_client_id = client_id
        current_user.save
      end
    end
  end
于 2015-03-15T23:18:12.813 回答
3

我正在使用带有 express 和通用分析模块的节点,并选择使用嵌入在 _ga cookie 中的 cid,而不是生成我自己的 cid 服务器端。

我的 server.js 看起来像这样......

app.use(function(req, res, next) {
  if(req.session && (!req.session.cid) && req.cookies._ga){
    //Use the cid already embedded in the _ga cookie and save to session so I can access from socket routes
    var gaSplit = req.cookies._ga.split('.');
    req.session.cid = gaSplit[2] + "." + gaSplit[3];
  };
  next();
});  

然后以后,我可以做到这一点..

ua = require('universal-analytics')
var visitor = ua('UAXXX', req.session.cid)

高温高压

于 2013-09-03T22:14:29.027 回答