选择您的平台:
Google Analytics Measurement Protocol 不会返回 HTTP 错误代码,即使事件格式不正确或缺少必需参数也是如此。为确保事件有效,您应先通过 Measurement Protocol 验证服务器对其进行测试,然后再将其部署到正式版。在经过验证,确认事件结构正确无误后,您应验证实现,以确保使用的密钥正确无误。
您可以直接调用验证服务器,也可以使用 Google Analytics Event Builder。借助 Google Analytics Event Builder,您能够以交互方式构建事件,并且可以使用 Measurement Protocol 验证服务器加以验证。
本指南介绍了如何将事件发送到适用于 Google Analytics 4 的 Measurement Protocol 验证服务器以及如何解读响应。
发送事件以进行验证
对于发送到 Measurement Protocol 的事件和发送到 Measurement Protocol 验证服务器的事件,两者在请求方面的唯一区别是网址。
| 服务器 | 网址 | 
|---|---|
| Measurement Protocol | /mp/collect | 
| Measurement Protocol 验证服务器 | /debug/mp/collect | 
所有其他请求字段都相同。
我们建议采用以下验证方法:
- 在开发期间,使用以下任一选项执行严格的验证检查:
- 使用事件构建器验证请求。
- 向验证服务器发送请求,并将 validation_behavior设置为ENFORCE_RECOMMENDATIONS。
 
- 在生产环境中,发送请求时请勿设置 validation_behavior,以最大限度地减少 Measurement Protocol 拒绝的数据。
以下代码显示的是发送到 Measurement Protocol 验证服务器的无效事件:
const firebaseAppId = "FIREBASE_APP_ID";
const apiSecret = "API_SECRET";
fetch(`https://www.google-analytics.com/debug/mp/collect?firebase_app_id=${firebaseAppId}&api_secret=${apiSecret}`, {
  method: "POST",
  body: JSON.stringify({
    app_instance_id: "APP_INSTANCE_ID",
    validation_behavior: "ENFORCE_RECOMMENDATIONS",
    events: [{
      // Event names must start with an alphabetic character.
      name: "_badEventName",
      params: {},
    }]
  })
});
验证响应
以下是验证服务器对上述事件的响应:
{
  "validationMessages": [
    {
      "fieldPath": "events",
      "description": "Event at index: [0] has invalid name [_badEventName]. Names must start with an alphabetic character.",
      "validationCode": "NAME_INVALID"
    }
  ]
}
以下是验证服务器对不存在验证问题的请求的响应:
{
  "validationMessages": []
}
响应
| 键 | 类型 | 说明 | 
|---|---|---|
| validationMessages | Array<ValidationMessage> | 验证消息的数组。 | 
ValidationMessage
| 键 | 类型 | 说明 | 
|---|---|---|
| fieldPath | 字符串 | 无效字段的路径。 | 
| description | 字符串 | 对错误的说明。 | 
| validationCode | ValidationCode | 与错误相对应的验证代码。 | 
ValidationCode
| 值 | 说明 | 
|---|---|
| VALUE_INVALID | 为 fieldPath提供的值无效。请参阅限制。 | 
| VALUE_REQUIRED | 没有为 fieldPath提供必需值。 | 
| NAME_INVALID | 提供的名称无效。请参阅限制。 | 
| NAME_RESERVED | 提供的名称是预留名称之一。请参阅预留名称。 | 
| VALUE_OUT_OF_BOUNDS | 提供的值过大。请参阅限制。 | 
| EXCEEDED_MAX_ENTITIES | 请求中的参数过多。请参阅限制。 | 
| NAME_DUPLICATED | 同一名称在请求中多次提供。 |