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

nic*_*ris 7 javascript java google-analytics measurement-protocol

我一直在使用Google Analytics(分析)为我的网络应用程序进行基本分析 - 只需使用以下javascript调用跟踪网页展示次数:

ga('create', 'UA-XXXXXXXXX-1', 'mydomain.com');ga('send', 'pageview')
Run Code Online (Sandbox Code Playgroud)

这种方法总是让我感到沮丧,因为我无法可靠地捕获一些服务器端事件.我刚刚发现我可以使用Measurement Protocol来记录服务器端的事件.除了关于cid(clientid)参数之外,在我的服务器上记录事件看起来很容易.

我所理解的是,在浏览器上,使用javascript我当前已经随机创建了cid,然后将其存储在_ga cookie中.我也明白,我应该在同一客户端的客户端("页面视图")和服务器(其他事件)调用之间共享clientid/cid值,以便它们相互关联.

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

问题是:我应该

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

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

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

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

令我担心这种方法的是,ID只会在服务器上的会话中持续存在.我认为clientId(cid)的意图是它会在很长一段时间内持续存在...所以我想我会忘记谁是新用户还是回头客?

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

肯定会欣赏有关使用哪种方法的建议....谢谢!

And*_* H. 3

我还建议您选择选项 2:让 Google 处理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
Run Code Online (Sandbox Code Playgroud)