Google Analytics 4 中用Measurement Protocol API发送数据

Google Analytics 4 Haran 3年前 (2021-03-14) 4640次浏览 14个评论
文章目录[隐藏]

更新时间:2023年8月7号

之前beta版本的时候是叫Measurement Protocol API,现在正式版已经发布,改为Measurement Protocol(文档是叫Measurement Protocol,页面显示的Measurement Protocol API)。

什么是Measurement Protocol?

Measurement Protocol,简称MP协议,叫衡量协议,是GA4中提供能够将数据直接通过HTTP的形式以事件直接发送谷歌服务器,MP通常用于线下数据发送给Google Analytics,实现以下目标:

  • 将线上和线下行为联系起来
  • 衡量客户端和服务器端的互动情况
  • 发送在标准用户互动之外发生的事件(例如线下转化)
  • 发送来自无法使用自动收集功能的设备和应用(如自助服务终端、手表等)的事件

与数据导入最大的区别在于GA4立刻能够收到并会出现在实时报告里面的。

 

 

与UA的Measurement Protocol的对比

GA4Measurement Protocol和UA的对比,有这个几个不同:

  • 首先,最大的不同在于引入了Measurement Protocol API secrets(秘钥),需要使用秘钥才可以向Google Analytics 4发送数据,因为V1 版本的只需要知道Tracking ID就可以向Google Analytics发送数据,Tracking ID可以在网页上查到,这会导致你的竞争对手可以随意给你Google Analytics发送垃圾数据去干扰你,其实有点不安全的,所以Measurement Protocol API就增加了秘钥。它的目的主要就只阻止垃圾流量。
  • 其次是传递的数据Measurement Protocol 是需要用json格式传递的,需要代码去执行传递,不能直接打开传递,所以不能用于邮件的打开跟踪,这个倾向用于线下数据的导入。
  • 最后就是,Measurement Protocol 目前只能用HTTPS通过Post的形式发送。

 

创建密钥匙

Measurement Protocol API的设置位置是在数据流,点击「Measurement Protocol API 密钥」就可以看到管理和设置界面:

Google Analytics 4 中用Measurement Protocol API发送数据

点击右上角的“创建”去创建一个API秘钥,就可以获取秘钥值,要通过MP API协议发送数据给GA4,必须要的是秘钥值和衡量ID。

  • 秘钥值:hT8GXWTRSKS728kpUskKhQ
  • 衡量ID:G-HZ4RDGTX66

除此之外的话,如果要将数据跟原有的数据对应起来,往往还需要Client ID /User ID。

用MP协议发送数据

MP协议可以通过客户端发送,也可以通过服务端发送,最多发送16kb数据。

客户端发送

Measurement Protocol 的示例代码如下:

const measurement_id = `G-XXXXXXXXXX`;
const api_secret = ``;

fetch(`https://www.google-analytics.com/mp/collect?measurement_id=${measurement_id}&api_secret=${api_secret}`, {
  method: "POST",
  body: JSON.stringify({
    client_id: 'XXXXXXXXXX.YYYYYYYYYY',
    events: [{
      name: 'tutorial_begin',
      params: {},
    }]
  })
});

 

  • measurement_id,就是衡量ID G-HZ4RDGTX66
  • api_secret:就是秘钥值hT8GXWTRSKS728kpUskKhQ
  • client_id:GA的client ID
  • name:事件名字

这里没有设置事件参数、用户属性。

 

我们可以将上述设置到https://ga-dev-tools.appspot.com/ga4-event-builder/测试一下,这是官方提供的一个测试工具,设置如下:

 

Google Analytics 4 中用Measurement Protocol API发送数据

点击Validate event验证这个事件:

Google Analytics 4 中用Measurement Protocol API发送数据

验证是有效的,接下来再点击一下将这个数据发送给GA4,到实时报告中看:

Google Analytics 4 中用Measurement Protocol API发送数据

 

事件已经被接收到了,表示这样的数据结构发送是没问题的。

服务端发送

服务端发送将数据通过payload的方式发送到:ttps://www.google-analytics.com/mp/collect?measurement_id=G-HZ4RDGTX66&api_secret=hT8GXWTRSKS728kpUskKhQ

需要将秘钥和衡量组装上去,才能发送成功。

payload的数据结构如下:

Google Analytics 4 中用Measurement Protocol API发送数据

 

常见数据问题

数据归因到(not set) / (not set)

如果你像官方文档那样或在https://ga-dev-tools.appspot.com/ga4-event-builder/上调试的数据结构去发送,那么会导致所有的数据都划分(not set) / (not set)。

正确的做法是需要发送session_id和engagement_time_msec,这样才能正常归因,payload里的数据结构应该是:

{
 "timestamp_micros": "{{ UNIX_TIME_16_SYMBOLS }}",
 "non_personalized_ads": {{ true_or_false }},
 "events": [
 {
  "name": "{{ EVENT_NAME }}",
  "params": {
  "session_id": "{{ SESSION_ID }}",
  "{{ PARAM_NAME }}": "{{ PARAM_VALUE }}"
  }
 }
 ],
 "client_id": "{{ CLIENT_ID }}",
 "user_id": "{{ USER_ID }}"
}

 

New Users是0

如果你完全是通过MP协议去跟踪,出现New Users为0,这便是没有发送first_visit/first_open事件,因为New User是基于first_visit/first_open事件计数

但由于 first_visit/first_open事件是GA4预留事件名,是自动收集的事件,不能通过其他方式发送,也就是不能通过MP协议发送,所以通过MP协议区分不了新用户。

 

 

 

更多在MP协议中可以用的参数请看:Google Analytics 4 传递参数解释


如有疑问,可以在文章底部留言或邮件(haran.huang@ichdata.com) 我~
喜欢 (8)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(14)个小伙伴在吐槽
  1. 那之前ua统计邮件打开次数的方式是不是不能用了
    Tor2023-11-14 11:11 回复 Windows 10 | Chrome 119.0.0.0
    • Haran
      还是可以的,用法一样。
      Haran2023-11-15 13:27 回复 Mac OS X | Chrome 119.0.0.0
  2. 我通过Measurement Protocol Api发送first_visit/first_open事件之后,无法在实时页面看到新用户的数量,是什么原因呢?
    xm2023-09-13 21:06 回复 Mac OS X | Chrome 114.0.0.0
    • Haran
      first_visit/first_open事件是GA4预留事件名称,不能通过MP协议发送,估计通过MP协议区分不了新用户。
      Haran2023-09-14 08:43 回复 Mac OS X | Chrome 117.0.0.0
  3. 用MP发送的事件,在GA4后台只有 用户数,没有新用户数,这是为什么呢?
    JoJo2022-07-15 18:21 回复 Windows 10 | Chrome 103.0.0.0
    • Haran
      你用已经访问过的client ID,那就是回访用户
      黄业忠2022-07-15 21:58 回复 Mac OS X | Chrome 103.0.0.0
      • 是一个新建的property,client ID也都改成新的了,用户数持续在增长,但是时间范围即使拉到最初建property的时候,新用户数也是0,很奇怪。
        JoJo2022-07-19 17:19 回复 Windows 10 | Chrome 103.0.0.0
        • Haran
          没有first_open事件,所有new users为0
          黄业忠2022-07-19 21:12 回复 Mac OS X | Chrome 103.0.0.0
  4. 创建了秘钥,但是秘钥值那里是空的,没有秘钥值 这是什么问题呢
    xiaoma2022-05-20 15:58 回复 Windows 10 | Chrome 101.0.4951.54
    • Haran
      刷新一下或重新创建。
      黄业忠2022-05-20 18:19 回复 Mac OS X | Chrome 101.0.4951.64
  5. 这里面如果是APP的项目的话,没有衡量ID怎么 ?要生成一个web的应用拿到衡量ID再上报吗,client id是GAid的话,这个怎么获取啊
    douson2021-04-27 14:01 回复 Windows 10 | Chrome 86.0.4240.198
    • Haran
      APP不会有线下数据,都是应用上数据,你的是什么情况
      黄业忠2021-04-27 14:17 回复 Mac OS X | Chrome 90.0.4430.85
      • 我们现在情况是这样的,我们有付款后,会有自动续订的功能,但如果通过App上报purchase事件的话,就没法监听有没有续订,所以现在想通过服务端来上报purchase的事件来监控每个渠道的收益情况,将首次付费和续订付费都打到这个事件中,所以想看下这个API能不能实现的
        douson2021-04-27 14:29 回复 Windows 10 | Chrome 86.0.4240.198
        • Haran
          你可以在APP里直接触发这个续订的事件,续订扣费时,支付成功会有回传,就触发该事件
          黄业忠2021-04-27 14:35 回复 Mac OS X | Chrome 90.0.4430.85