如何获取Google Analytics客户端ID

50
当你通过运行以下命令创建一个 analytics.js 的新实例时:
ga('create', 'UA-XXXXXXX-Y', {'cookieDomain': 'none'});
GA 将会创建一个唯一的客户端 ID。我想获取这个 ID 并将其用于自己的目的,但我只能找到此参数的 setter,却找不到任何 getter 方法来获取它。
GA 会在稍后的一个名为 &cid=123123.232323 的参数中发送它。
有人知道如何获取它吗?

5个回答

103

谷歌有一些关于获取客户端ID的文档

看起来是这样的:

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

我之前也用过这个:

ga.getAll()[0].get('clientId');

编辑: 如果页面上有多个跟踪器,可能在索引0处的不是您想要的跟踪器,因此替代函数应该如下:

function() {
  try {
    var trackers = ga.getAll();
    var i, len;
    for (i = 0, len = trackers.length; i < len; i += 1) {
      if (trackers[i].get('trackingId') === "ID-PROPERTY") {
        return trackers[i].get('clientId');
      }
    }
  } catch(e) {}  
  return 'false';
}

其中ID-PROPERTY是您的属性ID(即UA-XXXXX-XX)。


那么我假设我们需要在我们的Web项目中添加某种分析JS库?然后我们可以将这个值发送到后端,以便在这个Java代码中进行Java集成吗?https://cloud.google.com/appengine/docs/google-analytics - fIwJlxSzApHEZIl
3
嗨,@Blexy,请问你知道 GA 文档函数为什么不起作用吗?目前可以使用 getAll。只是好奇另一种方法为什么没有返回任何内容。 - Doug Fir
3
@DougFirr 似乎在调用 getAll 和分析库尚未初始化和处理队列时使用了 同步 语法。因此,在那个时间点上没有索引为0的追踪器。请尝试使用 异步 语法,例如 ga(function(tracker) { /* 您的获取器代码 */}); - Artem Platonov
2
我对同步代码很感兴趣。ga.getAll()[0].get('clientId');是否有文档支持并保证在未来几个月/年内仍然有效,或者可能很快被修改? - Basj
为什么这个脚本对我不起作用?!我完全按照这个脚本使用了。 - B4b4j1

35

虽然作者明确表示他使用的是Javascript,但其他人(包括我)可能正在寻找从服务器端获取此信息的方法,例如PHP。

对于GA4和UA,我发现您可以轻松检查_ga cookie,它看起来像:

_ga=GA1.3.475128143.1522318100
在上面的示例中,用户id为“475128143.1522318100”。
因此,在PHP中,我可以快速获取它:
$gaUserId = preg_replace("/^.+\.(.+?\..+?)$/", "\\1", @$_COOKIE['_ga']);

您还可以使用JavaScript在单行中检索cookie,而不使用ga()函数:

var gaUserId = document.cookie.match(/_ga=(.+?);/)[1].split('.').slice(-2).join(".")

这对我起作用。


2
被踩了,抱歉!Google Analytics文档明确说明不要通过浏览器API访问其cookie,因为它们的cookie可能会更改。相反,请使用提供的API获取客户端ID。 - Benjamin Hoffman
@BenjaminHoffman,你能分享一下这个的参考资料吗? - raja pateriya
这个内容在他们的文档中随处可见,但这里只举一个例子。https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#getting_the_client_id_from_the_cookie - Benjamin Hoffman
@BenjaminHoffman,他们的文档只展示了Javascript版本。 - Brandon
9
有时候这不是一个实际可行的选择,而以上回答中显示的类似解决方案会很有用。 - nh43de
从谷歌文档:“不应直接访问analytics.js设置的cookie,因为cookie格式可能在将来更改。相反,开发人员应使用readyCallback等待直到加载analytics.js,然后获取存储在跟踪器上的clientId值。”- https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#getClientId - SIRHAMY

6

首先创建Google Analytics ga对象来创建一个tracker对象,通过传递一个"Ready callback"函数来使用该跟踪器调用其他方法。

ga()命令队列提供了一个接口,可以几乎完成您需要使用analytics.js库的所有操作。

"function(tracker)"是一个回调函数,在分析库完全加载并准备好进行交互时调用。该函数以默认跟踪器对象作为第一个参数调用。如果没有创建默认跟踪器,则第一个参数将返回undefined。

注意:当回调函数被调用时,所有ga对象方法都可用于使用,包括您想要的tracker.get('clientId')

请在下面的代码中用您从Google Analytics获得的UA代码替换UA-XXXXX-Y.

// Queues a tracker object for creation.
ga('create', 'UA-XXXXX-Y', 'auto');

// Once the tracker has been created, log the
// client ID to the console.
ga(function(tracker) {
  console.log(tracker.get('clientId'));
  /* Your other code here */
});

如果您想为第1行和第2行创建一个命名跟踪器,可以使用以下代码。

// Queues a named tracker object for creation.
ga('create', 'UA-XXXXX-Y', 'auto', 'myTracker');

官方Google文档:Cookies和用户识别


我认为你的第一个代码块多了一个}(在“other code here”注释所在的行和下一行都有一个)。 - penitent_tangent

0
如果您正在使用Google Tag Manager,您可以使用用户定义变量 -> 变量类型:“第一方Cookie” -> Cookie名称 = _ga。让我们称之为“GA Cookie”。它将存储像这样的值GA.1.1.123.123。
要剪切“GA.1.1”,请创建另一个用户定义变量 -> 变量类型:“自定义JavaScript”并编写一个简单的JS函数:
function() {
    var pattern = "GA1.1.";
    var id = {{GA Cookie}}.substr(pattern.length);
    return id;
}

它并不总是“GA1.1”,但仍然有5个标志。你可以使用不同的变量,比如var length = 5,但对我来说,它看起来像一种魔法数字。


0
ga((tracker) => {
  console.log(tracker.get('trackingId'));
});

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