【问题标题】:How do I configure my google analytics account to accept requests from file:// urls?如何配置我的 google 分析帐户以接受来自 file:// url 的请求?
【发布时间】:2014-12-19 07:42:40
【问题描述】:

我正在尝试让谷歌分析与我的 PhoneGap/Cordova 应用程序一起工作。

默认情况下,analytics.js 库不会发送来自 file:// 类型 url 的请求。我从this site 和它指向的StackOverflow question 中发现,我可以让分析库使用本地存储,而不是 cookie,以便通过配置 GA 来跟踪客户端 ID:

(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','http://www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-XXXXX-1', 'auto', {
        'allowLinker': true,
        'storage': 'none','clientId':localStorage.getItem('gaClientId')
    });
ga(function(t){localStorage.setItem('gaClientId',t.get('clientId'));});

然后我可以通过添加以下内容让库从非 http/https url 发送请求:

ga('set', 'checkProtocolTask', null);

现在我可以从我的浏览器控制台看到该库正在将页面视图发送到 google-analytics.com,类似于以下内容:

http://www.google-analytics.com/collect?v=1&_v=j31&a=6458293880&t=pageview&_s=1&dl=file%3A%2F%2F%2Fpath%2Fto%2Findex.html&ul=en-us&de=ISO-8859-1&sd=24-bit&sr=1440x900&vp=1283x150&je=1&fl=16.0%20r0&_u=cGAAAAQB~&cid=389492833.14589283847&tid=UA-XXXXX-1&z=1277371227

但是,在 google-analytics.com 方面,Google 会在收到该请求后忽略该请求,并且在我的帐户下没有任何显示。如果我手动将上述 URL 的“dl=file...”部分更改为“dl=http...”,那么 Google 会接受它,我会立即在我帐户的“实时”选项卡下看到该请求.

所以,看来我已经正确设置了浏览器方面,但是...

  1. 如何配置我的 google-analytics 帐户以接受浏览器发送的请求?
  2. 或者,有没有一种方法可以配置浏览器端,使其发送“dl=http://...”而不是“dl=file://...”,即使它来自 file:// URL?

(如果我必须选择一个答案,我想我可能更喜欢#2而不是#1的答案。)

我知道有一个cordova plugin for google analytics,但我没有太多运气让那个工作,而且,即使我让它工作,我需要我的应用程序能够登录到多个谷歌-分析帐户一次,我认为插件无法做到这一点。

【问题讨论】:

  • 你为什么不使用分析插件呢?不确定该插件现在是否支持多个跟踪器,但可以完成
  • 我无法为 Cordova 提供帮助,但您是多久以前创建的帐户,它试图发送给它需要 24-48 小时才能开始显示数据。你可以手动发送东西:developers.google.com/analytics/devguides/collection/protocol/…
  • @jcesarmobile - 我并不完全反对该插件,但是,除了我之前列出的不使用它的原因之外,还有一个事实是它发送的数据没有显示在“实时”选项卡中(根据它的开发人员),并且来自插件的数据显示速度通常很慢(一旦你让它工作)。另一方面,非插件技术距离工作只有几英寸的距离,目前只有 1 次打击。它还具有与我的移动网站(与它共享代码)相同的工作方式的额外好处。这只是现在容易实现的目标。
  • @DaImTo - 我几天前创建了帐户。它将显示其他数据,而不是来自 file:// URL 的数据。

标签: cordova google-analytics


【解决方案1】:

在浏览了缩小的谷歌代码后,我在原始问题中找到了#2的答案:

ga('set', 'checkProtocolTask', function(data) {
    data.set('location', 'http://whatever.host.I.want.com');
});

像这样覆盖“checkProtocolTask​​”会做两件事:

  1. 默认/原始“checkProtocolTask​​”检查请求是否来自 http/https,并为 file:// URL 引发异常。覆盖它会阻止这种情况发生。
  2. 此方法(与所有 14 个左右迭代调用的任务一样)提供了一个数据对象,用于构建发送到 google-analytics.com 的请求。除其他外,该数据对象包含一个“位置”属性,该属性最终变成发送给谷歌的“dl”查询字符串参数。通过将“位置”以及“dl”参数更改为 http URL,您可以防止 Google 忽略该命中。

要更改“dl”参数,您可以改写“buildHitTask”,这可能是一个更恰当命名的任务,用于修改发送给 Google 的“命中”。但是,我不知道原始 buildHitTask() 的所有功能,因此除非您进一步调查,否则我会犹豫是否要替换它。我知道“checkProtocolTask​​”可以安全替换,因为很清楚它的工作应该是什么。

【讨论】:

  • 我们可以做ga('set', 'checkProtocolTask', null);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 2018-10-15
  • 2022-01-21
  • 2011-04-05
  • 2020-07-12
  • 1970-01-01
相关资源
最近更新 更多