我正在使用php-ga(https://packagist.org/packages/unitedprototype/php-ga)向GA发送简单分析 - 基本上捕获API端点何时被击中。
我使用下面的代码并且它运行良好,但是GA将每个端点命中(通过刷新测试页面进行测试)作为唯一访问者。以前有人见过这个吗? API知道'谁'正在联系它,感谢身份验证。
有人能告诉我如何告诉GA每次刷新实际上是一次用户会话,而不是一次全新的访问吗?
use UnitedPrototype\GoogleAnalytics;
$ga = new GoogleAnalytics\Tracker('UA-12345678-1', 'mysite.com');
$visitor = new GoogleAnalytics\Visitor();
$visitor->setIpAddress($_SERVER['REMOTE_ADDR']);
$visitor->setUserAgent($_SERVER['HTTP_USER_AGENT']);
$session = new GoogleAnalytics\Session();
// Assemble Page information
$page = new GoogleAnalytics\Page('/api/v1/test-ga-thingy');
$page->setTitle('Testing the API Thingy');
// Track page view
$ga->trackPageview($page, $session, $visitor);
答案 0 :(得分:1)
我有同样的问题,为了解决这个问题,你需要让PHP检查分析cookie是否已设置,如果是,那么它不应该创建一个新的,如果它不应该。
打开文件GoogleAnalytics/Session.php
,然后转到第72
行。在那里你会找到这个代码:
public function __construct() {
$this->setSessionId($this->generateSessionId());
$this->setTrackCount(0);
$this->setStartTime(new DateTime());
}
创建一个新的Session实例后,它将通过这些行。但是在这里,它为每个实例提供了一个新生成的sessionid,为它提供了一个新的trackcount和一个新生成的startTime。那不是我们想要的,所以你需要改变它以查看是否已经有来自谷歌分析的任何cookie,如果有,它应该使用那些。将这些行更改为:
public function __construct() {
if(!isset($_COOKIE['__utmb'])){
$this->setSessionId($this->generateSessionId());
$this->setTrackCount(0);
$this->setStartTime(new DateTime());
}else{
$this->setSessionId(_COOKIE['__utmc']);
$this->fromUtmb($_COOKIE['__utmb']);
}
}
这解决了1个问题,但另外一个问题,每次创建“访客”类的新实例时都会遇到同样的问题。
打开文件GoogleAnalytics/Visitor.php
,然后转到第150
行。在那里你会找到这个代码:
public function __construct() {
// ga.js sets all three timestamps to now for new visitors, so we do the same
$now = new DateTime();
$this->setFirstVisitTime($now);
$this->setPreviousVisitTime($now);
$this->setCurrentVisitTime($now);
$this->setVisitCount(1);
}
您需要将其更改为:
public function __construct() {
// ga.js sets all three timestamps to now for new visitors, so we do the same
if(isset($_COOKIE['__utma'])){
$this->fromUtma($_COOKIE['__utma']);
}else{
$now = new DateTime();
$this->setFirstVisitTime($now);
$this->setPreviousVisitTime($now);
$this->setCurrentVisitTime($now);
$this->setVisitCount(1);
}
}