【问题标题】:What is the client ID when sending tracking data to google analytics via the measurement protocol?通过测量协议将跟踪数据发送到谷歌分析时,客户端 ID 是什么?
【发布时间】:2013-01-09 02:20:04
【问题描述】:

我想使用 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 对现有用户的内部引用。

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

【问题讨论】:

    标签: google-analytics google-analytics-api


    【解决方案1】:

    整数或 UUID

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

    必需/可选

    使用 js 跟踪时,Google Analytics(分析)服务器会忽略发送的缺少用户 ID 的请求。所以假设它是必需的。

    将网络访问者与测量协议操作相关联

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

    更新

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

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

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

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

    ga('create', 'UA-XXXXX-Y', {'clientId': 'your_client_id'});
    

    【讨论】:

    • 没有将后端用户与之前由 analytics.js 跟踪的访问者联系起来,这是“衡量协议”的要点之一,允许将推荐人/广告系列/登陆页面与后来的非网络结果?我怀疑正确的方法是从一开始就提供您自己网站的clientId(使用developers.google.com/analytics/devguides/collection/…),这样analytics.js 的页内跟踪和您自己以后的测量协议操作都可以轻松使用它。
    • 新的 clientId 是旧的 cid,现在是可写的(响应更新)。您仍然有同样的问题: cid 通常在您认识访问者之前设置(例如在登录之前)。而且你不能在不丢失所有会话数据(前引用者)的情况下用你自己的值重新设置它。
    • clientId 代表客户端,如 deviceclient-side - not 用户。因此,不应将其设置为后端 UUID。谷歌使它可写的原因只是为了与Measurement Protocol一起使用。例如,要跟踪服务器端事件,您应该 1. 让您的 js 代码从 ga 获取 clientId 值 2. 将其发送到服务器(您可以将其存储在会话中以备后用) 3. 在服务器端使用该 clientId
    • 哦,将后端用户与 Google Analytics 联系起来是尚未发布的userId 的目的。即将推出!
    • 那么最好的方法是什么?在服务器上生成 cid(我正在使用 node/universal-analytics)或允许 analytics.js 管理 cid 并从服务器上的 cookie 中检索它(仍然不确定如何执行此操作,格式看起来不同.. req.cookies._ga:GA1.1.759500204.1374013344)似乎如果我在服务器上生成,我负责保持长期运行的会话以进行长期分析(例如 express.session.MemoryStore() 不会削减它不再)
    【解决方案2】:

    在 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
    

    【讨论】:

    • 请注意,Google 会警告直接读取 cookie,因为格式可能会改变。在撰写本文时,可以找到此警告 here
    【解决方案3】:

    我正在使用带有 express 和 Universal-analytics 模块的节点,并选择使用嵌入在 _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)
    

    HTH

    【讨论】:

    • 此提交包括我为使服务器端 GA 集成正常工作所做的所有工作(我认为)github.com/hackify/hackify-server/commit/…
    • 可能会有这个:req.session.cid = req.cookies._ga.split('.').slice(2, 4).join('.');
    • @MichaelDausmann,从您的示例来看,您的后端似乎有 data.userId。从我的角度来看,我建议您开始使用服务器端用户 ID 而不是客户端生成的客户端 ID。这种方法为您的 GA 数据解锁了跨设备跟踪和增强的重复数据删除。他们有一篇关于这个特定主题的好文章:support.google.com/analytics/answer/…
    猜你喜欢
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    相关资源
    最近更新 更多