我想使用Google的新测量协议从我的服务器而不是JavaScript发送跟踪事件。
此页面显示客户端ID是必需的: https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide#required
这个页面说它是可选的: https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#visitor
另外,这些文档中定义的格式不同 - 第一页以整数为例,只是说它是“唯一值”,而第二个链接则表示它应该是UUID。
如果我在后端发送用户ID或生成的UUID,Google会如何知道将该访问者链接到现有的访问者会话?好像我需要检索GA对现有用户的内部引用。
感谢任何帮助 - 谢谢!
答案 0 :(得分:53)
整数或UUID
当您使用javascript跟踪时,cid
相当于_utma
Cookie中的第二个值。在js跟踪中,它是一个随机整数(由Math.round(2147483647 * Math.random())
生成)。但它被调整并以字符串形式发送:因此您可以使用两种格式(整数或UUID)。
<强>必需/可选强>
使用js跟踪,Analytics服务器会忽略使用缺少的用户ID发送的请求。所以假设它是必需的。
将网络访问者与测量协议操作相关联
如果您要将后端用户与之前使用Google Analytics ga.js
跟踪的访问者相关联,您可以从cid
Cookie中获取_utma
值。但我不推荐它;每次更改(终端或浏览器更改,cookie清理等),您将失去与客户先前操作的链接。
<强>更新强>
当提出问题时,analytics.js
不存在。 cid
现已存储在Cookie _ga
中。你可以用javascript获取它:
ga(function(tracker) {
var clientId = tracker.get('clientId');
});
在编写本文时,如果您从跟踪器获取clientId,就像上面的代码一样,它不会给你一个UUID,而是两个随机的32位整数,格式为“X.Y”。此实现可能在将来更改为UUID。
或者使用您自己的值设置它(如后端生成的UUID):
ga('create', 'UA-XXXXX-Y', {'clientId': 'your_client_id'});
答案 1 :(得分:6)
在Rails中:
def save_google_analytics_client_id
if current_user && cookies["_ga"]
client_id = cookies["_ga"].split(".").last(2).join(".")
if current_user.google_analytics_client_id != client_id
current_user.google_analytics_client_id = client_id
current_user.save
end
end
end
答案 2 :(得分:3)
我正在使用带有快速和通用分析模块的节点,并选择使用嵌入在_ga cookie中的cid而不是生成我自己的cid服务器端。
我的server.js看起来像这样......
app.use(function(req, res, next) {
if(req.session && (!req.session.cid) && req.cookies._ga){
//Use the cid already embedded in the _ga cookie and save to session so I can access from socket routes
var gaSplit = req.cookies._ga.split('.');
req.session.cid = gaSplit[2] + "." + gaSplit[3];
};
next();
});
然后,我可以这样做..
ua = require('universal-analytics')
var visitor = ua('UAXXX', req.session.cid)
HTH