在javascript客户端和java服务器之间共享Google Analytics ClientID

Sharing Google Analytics ClientID between javascript client and java server

本文关键字:共享 Google Analytics ClientID 之间 服务器 javascript 客户端 java      更新时间:2023-09-26

我一直在使用Google Analytics为我的web应用程序进行基本分析,只是使用如下javascript调用来跟踪页面印象:

ga('create', 'UA-XXXXXXXXX-1', 'mydomain.com');ga('send', 'pageview')

这种方法一直让我感到沮丧,因为我无法可靠地捕获一些服务器端事件。我刚刚发现我可以使用测量协议在服务器端记录事件。在我的服务器上记录事件看起来很容易,除了cid(clientid)参数。。。

我所理解的是,在浏览器上,使用我目前拥有的javascript,cid会被随机创建,然后存储在_ga cookie中。我还知道,我应该在同一客户端的客户端("页面视图")和服务器(其他事件)调用之间共享clientid/cid值,以便将它们关联在一起。

这个StackOverflow链接对我来说是一个有用的参考

问题是:我应该吗

  1. 在服务器上创建一个clientid,然后与客户端共享;或
  2. 我应该让客户端上的javascript创建clientid,然后尝试与服务器共享吗?(我怀疑这是更好的答案)

对于(1),我认为我可以做的是:

  • 在服务器(即谷歌应用程序引擎)上的会话中存储UUID
  • 当我使用测量协议直接在服务器端创建事件时,直接使用该UUID
  • 当我使用jsp:在页面上创建ga对象时,请使用相同的UUID

    ga('create', 'UA-XXXXXXXXX-1', 'mydomain.com', 
    {'clientId': '<%=[value from the session]%>'});
    

这种方法让我担心的是,ID只会在服务器上的整个会话中持续存在。我认为clientId(cid)的目的是在很长一段时间内为客户端保留。。。所以我想我会忘记谁是新用户还是回归用户?

对于(2),坦率地说,我不知道该怎么做。。。我从上面的StackOverflow链接中知道,我可以从ga对象中的clientId参数中获取cid。我不知道如何将它发送回我的服务器(这可能是一个简单的javascript问题)。

如果能就使用哪种方法提供建议,我将不胜感激。。。。非常感谢。

我还建议您选择选项2:让谷歌处理cid参数的设置。

由于该参数已在域上的_ga cookie中设置,因此它会随每个HTTP请求一起传递到应用程序服务器。

您所需要做的就是在服务器端

  1. 从_ga cookie中提取CID
  2. 将其链接到当前用户(您的应用程序可能使用自己的会话cookie来识别用户)

例如,这个答案提供了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