通过测量协议向GA4属性发送页面查看事件



如何使用PHP通过Measurement Protocol将页面视图事件发送到GA4属性?

我就是这样做的,但在我的谷歌分析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和measurement_id需要是URI的一部分:https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events?client_type=gtag#required_parameters

最后,您可以使用调试模式来验证您的响应,并通过简单地将URL更改为googleanalytics.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添加到params:中

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

给下一个来的人一些额外的注意事项:

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

最新更新