小编nic*_*ris的帖子

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

我一直在使用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问题).

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

javascript java google-analytics measurement-protocol

7
推荐指数
1
解决办法
632
查看次数

无法从 Google App Engine 将事件发布到 Google Analytics

我正在尝试使用 Google App Engine (Java) 网络应用程序中的测量协议将事件发布到 google 分析。

我已经通过直接提交 URL 测试了 URL,它会立即(实时)显示在 Google Analytics 中。但是当我尝试在应用程序中发布它时,什么也没有显示。

所以我假设从我的 Java 代码开始有缺陷(也许是),所以我用谷歌的示例代码替换了我的代码,以便从谷歌应用引擎集成到谷歌分析这里。我改变了一点,但这里是关键位......

private static final URL GA_URL_ENDPOINT = getGoogleAnalyticsEndpoint();

private static URL getGoogleAnalyticsEndpoint() {
    try {
        return new URL("http", "www.google-analytics.com", "/collect");
    } catch (MalformedURLException e) {
        throw new RuntimeException(e);
    }
}

public boolean trackEvent(
        String category, String action, String label, String value) {

    try {

    Map<String, String> map = new LinkedHashMap<>();
    map.put("v", "1");             // Version.
    map.put("tid", gaTrackingId);
    map.put("cid", "555");
    map.put("t", "event");         // …
Run Code Online (Sandbox Code Playgroud)

google-app-engine google-analytics measurement-protocol

5
推荐指数
1
解决办法
576
查看次数

Swift中UITableView的动态DataSource交换

我是iOS/Swift开发的新手,并且在为UITableView进行DataSource的动态交换时遇到问题 - 请注意,我没有交换Delegate,只是数据源.

我已经在Stack Overflow上阅读了其他类似的问题/回复,但没有找到与我的情况相关的问题.通常他们是关于在"viewDidLoad"上设置DataSource(例如这一个,这个),而我的情况是关于当用户按下按钮时交换DataSource.我的代码中不存在引用问题中的问题.

这是我的代码大纲.我将buttonPress方法连接到storyboard中的TouchUpInside事件:

class ViewController: UIViewController, UITableViewDelegate {

    @IBOutlet weak var tableView: UITableView!

    ...    

    @IBAction func buttonPress(sender: UIButton) {

        ...

        self.tableView.dataSource = DummyDataSource()
        self.tableView.delegate = self
        self.tableView.reloadData()

    }

    ...

}
Run Code Online (Sandbox Code Playgroud)

......这是我的数据源类:

import UIKit

class DummyDataSource: NSObject, UITableViewDataSource {

    let names = ["A", "B", "C"]

    func tableView(tableView: UITableView,
                     numberOfRowsInSection section: Int) -> Int {
        return names.count
    }

    func tableView(tableView: UITableView,
                     cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        var cell = tableView.dequeueReusableCellWithIdentifier(simpleTableIdentifier) as UITableViewCell?

        if ( …
Run Code Online (Sandbox Code Playgroud)

uitableview ios swift

2
推荐指数
1
解决办法
1831
查看次数