更新时间:2024年6月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的对比
GA4的Measurement 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 密钥」就可以看到管理和设置界面:
点击右上角的“创建”去创建一个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.google/ga4/event-builder/测试一下,这是官方提供的一个测试工具,设置如下:
点击Validate event验证这个事件:
验证是有效的,接下来再点击一下将这个数据发送给GA4,到实时报告中看:
事件已经被接收到了,表示这样的数据结构发送是没问题的。
服务端发送
服务端发送将数据通过payload的方式发送到:https://www.google-analytics.com/mp/collect?measurement_id=G-HZ4RDGTX66&api_secret=hT8GXWTRSKS728kpUskKhQ
需要将秘钥和衡量组装上去,才能发送成功。
payload的数据结构如下:
常见问题
数据归因到(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协议区分不了新用户。
如何跟踪邮件打开
- 用Measurement Protocol的方式,也就是GA3的方式,直接复制一个GA4的请求,修改里面的cid、en、ep参数,然后以img的格式插入到邮件源码里
- 用Measurement Protocol API的方式,需要一个服务器做中转,打开邮件的时候向这个中转服务器请求,事件信息都在请求上,中转服务器触发后,将请求的事件信息都转化为Measurement Protocol API的格式再发送给GA4
更多在MP协议中可以用的参数请看:Google Analytics 4 传递参数解释