欢迎访问我的博客,有问题可以在任意文章底部留言评论

Measurement Protocol(MP)协议详解

Google Analytics 4 Haran 6年前 (2021-03-14) 14975次浏览 16个评论

更新时间:2026年6月7号

GA4 Measurement Protocol(简称 MP)是一套用于向 GA4 直接发送事件的 HTTP 接口。

它适合记录无法由网站 Google tag、GTM 或 Firebase SDK 自动收集的互动,例如 CRM 状态变化、线下转化、POS 交易、IoT 设备事件,以及邮件打开等发生在网站外的行为。

Measurement Protocol 的作用是补充网站或 App 的正常数据采集,而不是完全取代 Google tag、GTM 或 Firebase SDK。若只依赖 MP,部分用户、会话、归因和设备数据可能不完整。

什么是Measurement Protocol?

Measurement Protocol 使用HTTPS POST请求,将JSON格式的数据发送到GA4,数据流程是:

你的服务器 → GA4 Measurement Protocol → GA4事件

常见用途包括:

  • 关联线上和线下行为;
  • 上传服务器端发生的事件;
  • 发送 CRM、ERP、POS 等系统中的业务事件;
  • 记录无法安装 GA4 SDK 的设备或应用行为;
  • 将邮件Pixel请求转换为email_open事件

相比GA4数据导入不同,Measurement Protocol 是发送事件,而不是批量导入已有报表数据。它适合在事件发生时,由受控的服务端环境提交数据。

Measurement Protocol 请求的基本结构

GA4 Measurement Protocol 仅支持HTTPS POST请求。

请求地址为:

https://www.google-analytics.com/mp/collect

Web数据流请求URL必须包含measurement_id和api_secret

请求Body使用JSON格式:

{
  "client_id": "1234567890.1234567890",
  "events": [
    {
      "name": "tutorial_begin",
      "params": {
        "tutorial_name": "ga4_measurement_protocol"
      }
    }
  ]
}

其中以下是必要字段:

字段 说明
measurement_id GA4 Web 数据流的衡量 ID,例如 G-XXXXXXXXXX
api_secret 在 GA4 数据流中创建的 Measurement Protocol API Secret
client_id 匿名客户端标识
events 要发送的事件数组
events[].name 事件名称
events[].params 事件参数

单次请求大小最大为16 KB,最多可包含25 事件;每个事件最多包含25个参数。事件名称和参数名称只能使用字母、数字和下划线,并且必须以字母开头。

API Secret必须保存在服务器环境变量中,不能放进网站前端 JavaScript、邮件 HTML

 

创建Measurement Protocol API Secret

在数据流页面中,点击「Measurement Protocol API 密钥」就可以看到管理界面:

Measurement Protocol(MP)协议详解

点击右上角的“创建”就可以获得一个API密钥。

API Secret不是用户身份验证机制。它泄露后,其他人仍可能向你的 GA4 发送伪造事件,因此应妥善保管并定期轮换。

如何使用Measurement Protocol发送事件?

Measurement Protocol 应由受控环境发送,例如网站后端、CRM 或 ERP 系统、Server-side GTM、云函数、内部数据处理程序。

虽然浏览器技术上也能发出HTTP请求,但不应从网页前端直接调用Measurement Protocol,因为这会暴露 api_secret。

以下是服务端JavaScript示例:

这段代码会向 GA4 发送一个tutorial_begin事件。

client_id:建议使用真实的client_id;如果获取不到真client_id,可以每位收件人生成不同的随机、伪匿名cid,不要将邮箱、邮箱 Hash、姓名、手机号或内部CRM用户ID直接作为client_id发送到GA4。

如何验证MP请求?

Google 提供 GA4 Event Builder 用于测试 Measurement Protocol 请求,可以用于:

  • 验证事件格式
  • 检查JSON是否正确
  • 发送测试事件

上线前应先使用Event Builder或验证端点检查 Payload。

设置如下:

Measurement Protocol(MP)协议详解

 

点击Validate event验证这个事件:

Measurement Protocol(MP)协议详解

 

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

Measurement Protocol(MP)协议详解

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

 

常见问题

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

很多MP实施后会遇到:数据都划分(not set) / (not set)

原因是MP事件本身不会产生会话。

果要让MP事件关联到用户已经存在的会话,需要发送session_id和engagement_time_msec(距离上一个事件的时间不要超过24小时)

建议不要为了让数据“看起来有会话”而随意生成 session_id 或填入虚假的 engagement_time_msec。这会制造不存在的网站会话,污染会话数、参与度、跳出率及渠道报表。

如果事件本来就发生在网站外,例如邮件打开、线下交易或 CRM 状态变化,也可以不传 session_id,将它作为独立事件分析。

 

New Users是0

如果网站完全依赖Measurement Protocol上传数据,会发现New Users为0。

这是因为New User是基于first_visit/first_open事件计数,这两个事件属于GA4自动收集事件。

不能通过Measurement Protocol 主动发送,也不会自动产生,所以GA4 无法识别新用户,因此 New Users 通常都会是 0

 

如何跟踪邮件打开?

解决方式是在邮件中加入透明的 Tracking Pixel。邮件客户端或图片代理加载图片时,请求先发送到你的服务器;服务器再通过 Measurement Protocol 将这次请求发送为 email_open 事件。

总结

Measurement Protocol是GA4的服务端事件接口,适合补充网站或App无法自动收集的互动。

实施时应记住:

  • GA4 MP 仅支持 HTTPS POST 与 JSON Payload;
  • Web 数据流使用 measurement_id、api_secret 与 client_id;
  • api_secret 必须只保存在受控服务端环境;
  • 需要关联真实网页会话时,才传递真实 session_id;
  • engagement_time_msec 应反映真实参与时长,不能随意填充;
  • 邮件打开、CRM 变化等站外行为,可以作为独立事件发送;
  • MP 不能代替网站 Google tag、GTM 或 Firebase SDK。

有疑问可以在底部留言
喜欢 (8)
发表我的评论
取消评论

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(16)个小伙伴在吐槽
  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,那就是回访用户
      Haran2022-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
          Haran2022-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
      刷新一下或重新创建。
      Haran2022-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不会有线下数据,都是应用上数据,你的是什么情况
      Haran2021-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里直接触发这个续订的事件,续订扣费时,支付成功会有回传,就触发该事件
          Haran2021-04-27 14:35 回复 Mac OS X | Chrome 90.0.4430.85
  6. 博主,我想问一下如果要用Measurement Protocol 协议监测邮件打开情况,我该如何将邮件相关的数据倒入到GA新的view来避免对原视图的数据造成污染? 我看那个追踪代码只有GA的编号,但如何倒入具体的view?谢谢!
    Yunhui2018-03-13 21:56 回复 Mac OS X | Chrome 64.0.3282.186
    • Haran
      一般使用一個新的數據視圖去存儲
      GA小站2018-03-14 08:30 回复 Windows 10 | Chrome 63.0.3239.132