繁体   English   中英

通过 Measurement Protocol 向 GA4 媒体资源发送网页浏览事件

[英]send a pageview event via Measurement Protocol to a GA4 property

如何通过 Measurement Protocol 将网页浏览事件发送到使用 PHP 的 GA4 媒体资源?

我就是这样做的,但在我的 Google Analytics 4 属性中,我看不到任何流量。

$data = array(
    'api_secret' => 'XXXX-YYYYY',
    'measurement_id' => 'G-12345678',
    'client_id' => gen_uuid(), // generates a random id
    'events' => array(
      'name' => 'page_view',
      'params' => array(),
    )
);

$url = 'https://www.google-analytics.com/mp/collect';
$content = http_build_query($data);
$content = utf8_encode($content);

$ch = curl_init();
curl_setopt($ch,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-type: application/x-www-form-urlencoded'));
curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
curl_setopt($ch,CURLOPT_POST, TRUE);
curl_setopt($ch,CURLOPT_POSTFIELDS, $content);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);

我现在正在注册页面浏览量以跟踪 API 使用情况,这就是我发现的:

XTOTHEL 将内容类型设置为上面的 content/json 是正确的。 除了指定内容类型之外,您还必须将 JSON 数据作为 CURLOPT_POSTFIELDS 数据发送。

同样根据他们的规范,api_secret 和 measure_id 需要成为 URI 的一部分: https ://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events?client_type=gtag#required_pa​​rameters

最后,您可以使用调试模式来验证您的响应,并通过简单地将 URL 更改为google-analytics.com/debug/mp/collect来弄清楚现在发生了什么

这是我现在正在使用的代码:

//retrieve or generate GA tracking id
            if (empty($_COOKIE['_cid'])) {
                setcookie('_cid', vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex(random_bytes(16)), 4)));
            }
            $data = '{"client_id":"'.$_COOKIE['_cid'].'","events":[{"name":"load_endpoint","params":{"page_location":"'.$request->fullUrl().'"}}]}';
            echo '<pre>';
            print_r($data);

            $measurement_id = 'G-xxxxx';
            $api_secret = 'xxxx';
            $url = 'https://www.google-analytics.com/debug/mp/collect?api_secret='.$api_secret.'&measurement_id='.$measurement_id;
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $response = curl_exec($ch);
            curl_close($ch);
            echo $response;

这在一定程度上起作用。 目前,它将页面视图注册为自定义事件,而不是实际的页面视图。 我仍在试图弄清楚如何让它们以页面浏览量的形式出现。

跟进经过更多调试后,我发现页面视图实际上是有效的,它们只是没有出现在某些视图中。 解决方法是将 page_title 添加到参数中:

$data = '
{
  "client_id": "'.$_COOKIE['_cid'].'",
  "events": [
    {
      "name": "page_view",
      "params": {
        "page_location": "'.$request->fullUrl().'",
        "page_title": "'.$request->path().'"
      }
    }
  ]
}
';

对于接下来的人来说,还有一些额外的注意事项:

  • 调试模式确实为无效的顶级参数(client_id、事件)返回了一些有用的验证错误——但它没有为事件的“参数”内的任何内容返回错误。 IE - 我放了“page_asdtitle”而不是“page_title”,它接受它就好了。
  • 在使用调试模式时,我发送的所有测试实际上都没有出现在调试面板中。 我怀疑这是因为数据传播延迟,它可能没有加载实时数据。
  • 使用 JSON 验证器会有所帮助。 确保使用 GA 要求的对象和数组。
  • 如果您无法弄清楚为什么您的 PHP 代码不起作用,请将代码编写为 JavaScript 中的浏览器事件并在您的浏览器中运行。 有很多关于如何做到这一点的例子。 从那里,您可以使用 Dev Tools -> Network 来检查请求。 如果您右键单击“收集”端点的 google 分析请求,您将看到将请求复制为 CURL 的选项。 将其放入文本编辑器并将其与您的 PHP 代码发送的内容进行比较。
  • 要在没有大量传播延迟的情况下实际测试这一点,您可以登录 Google Analytics,转到报告 -> 实时,如果数据正常,您应该会在 30-60 秒内看到您的数据。 但是,如果您使用的是 /debug/ 端点,则不会显示实时数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM