Google Analytics v4 测量协议 - 如何发送技术和采集数据

use*_*062 6 google-analytics firebase measurement-protocol apple-appclips google-analytics-4

背景:

我正在将采集数据跟踪到移动应用程序。某些链接通过我的网站重定向到 App Store 或 Google Play 商店,其中 Google Analytics 收集这些重定向的数据。

该移动应用程序还利用了一项名为“App Clips”的新 iOS 功能,它基本上是一个无需用户通过商店下载即可打开的应用程序片段。当应用程序剪辑启动时,“中间人”重定向网站永远不会打开。

为了在 Android 和 iOS 采集上获得一致的数据,我想page_view通过测量协议收集事件,直接从“App Clip”触发。

问题:

GA v4 测量协议 API 处于 alpha 版本。该page_view事件实际上在文档中缺失,但仍然可以发送。

我想了解如何填充请求中的事件参数,以便发送“技术”和“采集”类别所需的数据。这至少意味着用户代理数据、确切的设备型号、活动、媒介和来源。

{
    "client_id": "<what_goes_here?>",
    "timestamp_micros": "1627192577008000",
    "non_personalized_ads": false,
    "events": [
        {
            "name": "page_view",
            "params": {
                "page_title": "App Clip",
                "language": "en-us",
                "page_location": "https://example.com/x?utm_campaign=my_campaign",
                "screen_resolution": "1170x2532",
                //"page_referrer": ""
                "page_path": "/x?utm_campaign=my_campaign"
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我不想在 App Clip 中使用 Firebase SDK,原因有两个:

  1. 我希望 App Clip 是轻量级的,并且 Apple 不鼓励使用第 3 方库
  2. 我无法保证发送screen_view将呈现与 相同的分析深度(相同的参数)page_view

Cyr*_*ris 3

客户端 ID 是指前端 gtag 脚本生成的 google 客户端 ID。

例如,假设您有一个标签管理器或刚刚向您的网站添加了一个分析标签。这会在浏览器上生成一个 cookie(默认情况下被命名_ga_<ID>- 在设置分析属性时可以检索 ID。注意:您可以轻松自定义 cookie 的名称)。该 cookie 包含客户端 ID。当您与后端 API 通信以触发事件时,您需要转发此值,可以直接在 API 调用中包含 cookie,也可以通过 JS(不是 HttpOnly)读取 cookie 并将该值与其他参数一起发送。

cookie 值看起来像GS1.2.163179xxxx.18.0.163179xxxx.0

然后提取客户端 ID 并将其添加到您的负载中。

在我们的 ruby​​/rails 代码中,我们使用以下命令提取客户端 ID

google_analytics_client_id = context[:controller].request.cookies[Settings.google_analytics_prefix]&.split('.')&.last(2)&.join('.')
Run Code Online (Sandbox Code Playgroud)

然后您可以将其发送到测量协议。我们的代码看起来像

def event_payload(user:, event_name:, google_analytics_client_id:, event_params: {}, event_time:)
  {
    user_id: user.id.to_s,
    timestamp_micros: (event_time.to_f * 1_000_000).to_i,
    non_personalized_ads: false,
    user_properties: {
      your_property: { value: user.some_property },
    },
    client_id: google_analytics_client_id,
    events: [
      { name: event_name }.tap do |h|
        h[:params] = event_params if event_params.any?
      end,
    ],
  }
end
Run Code Online (Sandbox Code Playgroud)

我不是 100% 确定这是否有效,因为我们这边似乎有问题(它确实为用户创建了事件,但例如他们没有正确获得 UTM 归因),但也许这与限制有关