使用gtag.js获取客户端ID

17

几个月前,Google发布了gtag.js作为使用Google Analytics进行跟踪的新方法,据我所知,最终取代了analytics.js。在设置新的Google Analytics帐户时,gtag.js是默认选项,因此代码片段从这个变成了:

<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 Tag Manager加载相同的analytics.js脚本,因为确实可用ga变量。但是,当调用回调时,tracker参数是undefined因为gtag.js不使用跟踪器, 因此这种方法肯定行不通。
我查阅了gtag.js的文档,但未能找到有关如何获取客户端ID的信息。analytics.js的文档指出不要直接访问cookie以获取客户端ID,这很合理。但是,是否有通过JavaScript API与gtag.js获取它的方法,还是我现在必须读取cookie?
3个回答

24

已被接受的答案不再适用(至少对于GA4)。正确的、最新的做法是:

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

请参阅官方 Gtag.js 文档中有关get的说明。


你必须将其包装在 Promise 中,因为客户端 ID 不会立即返回。 - Titenis
不需要承诺。您正在提交一个回调函数。然而,被接受的答案仍然完美地工作。对于通用分析,gtag方法可以解决GA4的问题。 - BNazaruk
@David Chouinard你好,您知道如何从通过Google Tag Manager实施的Google Analytics 4中获取客户端ID吗?因为gtag对象在那里不可见。 - Jakub Kriz
如果用户正在使用广告拦截插件?我认为它需要承诺回调,如果gtag返回空。 - Adriano Resende
在我的情况下,回调从未被调用。你知道是什么原因造成的吗? - Herve Mutombo

14
尽管跟踪器的“id”属性不可用,但它仍然是一个适当的GA跟踪器,至少在目前是这样。 因此,以下方法可用于获取客户端ID:
ga.getAll().forEach( (tracker) => {
  var id = tracker.get('clientId'); console.log(id)
})

使用ga.getAll()访问GA跟踪器后,您可以设置“customTask”,将clientId分配给您选择的自定义维度。请参阅Simo的指南这里


啊,是的,我忘记了那种方法。不幸的是,我必须依赖于ga变量被加载(即analytics.js),但这似乎比读取cookie更好。我测试过了,它可以工作。谢谢! - ba0708

2
有一种未记录的方法可以将客户端ID获取到Google Analytics中:
gtag('config', 'UA-12345-1', {
  'custom_map': {
    'dimensionX': 'clientId'
  }
});

显然,他们想要提供一种更方便的方式来获取值(您提供的是字符串“clientId”,然后将其解析为正确的值)。
这是由一个名叫 Yamata Ryoda 的人解决的,并在 Simo Ahava的文章中详细记录。我承认我自己还没有测试过它。

我看过那篇文章,但我的问题是我需要在JavaScript中访问客户端ID。我绝不是GA专家,但据我所知,代码片段将把客户端ID作为自定义维度发送到GA。换句话说,如果我没有弄错的话,它不会让我直接通过JavaScript访问该值。 - ba0708
当然,你是正确的。总有一天我会学会在回答问题之前仔细阅读它们。 - Eike Pierstorff
哈哈,不用担心 - 谢谢你尝试帮忙! :-) - ba0708
4
根据文档,参数应该被命名为"client_id"(而不是"clientId")。请参阅 https://developers.google.com/analytics/devguides/collection/gtagjs/migration#client_id_and_user_id。 - ninsky

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