使用 gtag.js 获取客户端 ID

Getting client ID with gtag.js

Google 几个月前发布 gtag.js 作为 Google 分析的新跟踪方式,据我所知最终取代了 analytics.js。 gtag.js 是设置新的 Google Analytics 帐户时的默认设置,因此代码片段来自:

<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-12345678-1', 'auto');
  ga('send', 'pageview');
</script>

对此:

<script async src="https://www.googletagmanager.com/gtag/js?id=UA-123456789-1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'UA-123456789-1');
</script>

我需要做的是用 gtag.js 获取客户端 ID。使用旧脚本,我可以执行以下操作。

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

看起来,gtag.js 通过 Google 跟踪代码管理器加载相同的 analytics.js 脚本,因为 ga 变量确实可用。但是,有一些区别,因为调用回调时tracker参数是undefinedbecause gtag.js does not use trackers,所以这种方法清除不会起作用。

我翻了翻the documentation for gtag.js, but I was not able to find any information on how to obtain the client ID. The documentation for analytics.js states not to access the cookie directly得到了客户端ID,有道理。但是有什么方法可以通过 JavaScript API 使用 gtag.js 获取它,还是我现在必须求助于读取 cookie?

有一种未记录的方法可以让 clientid 进入 GA:

gtag('config', 'UA-12345-1', {
  'custom_map': {
    'dimensionX': 'clientId'
  }
});

显然他们想提供一种更方便的方法来获取值(您按字面意思提供字符串 'clientId',然后将其解析为正确的值)。

这是一个叫 Yamata Ryoda and at length documented in an article by Simo Ahava 的人想出来的。我承认我还没有亲自测试过。

虽然跟踪器 id 属性 不可用,但至少目前它仍然是一个合适的 GA 跟踪器。 因此以下内容可以获取 clientId:

ga.getAll().forEach( (tracker) => {
  var id = tracker.get('clientId'); console.log(id)
})

使用 ga.getAll() 访问 ga 跟踪器后,您可以设置 'customTask' 将 clientId 分配给您选择的自定义维度。看西莫的攻略here

接受的答案不再有效(至少对于 GA4)。正确的、最新的方法是:

gtag('get', 'YOUR_MEASUREMENT_ID', 'client_id', (client_id) => {
    // do something with client_id
})

请参阅 official Gtag.js docsget 的文档。