cordova - 如何配置我的 Google Analytics 帐户以接受来自文件 ://urls? 的请求

标签 cordova google-analytics

我正在尝试让 Google Analytics 与我的 PhoneGap/Cordova 应用程序配合使用。

默认情况下,analytics.js 库不会发送来自 file://类型 URL 的请求。我从this site找到,以及 StackOverflow question它指出,我可以让分析库使用本地存储而不是 cookies,通过配置 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);

现在我可以从浏览器控制台看到该库正在将页面 View 发送到 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 ,但我没有太多运气让那个工作,而且,即使我让它工作,我需要我的应用程序能够一次登录到多个谷歌分析帐户,我不认为这是插件可以做到。

最佳答案

浏览缩小后的谷歌代码后,我找到了原始问题中#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”查询字符串参数。通过将“location”以及“dl”参数更改为 http URL,您可以防止 Google 忽略该命中。

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

关于cordova - 如何配置我的 Google Analytics 帐户以接受来自文件 ://urls? 的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27561676/

相关文章:

Facebook 谷歌分析

iphone - 如何将此脚本安装到 PhoneGap for iOS

angular - 使用 Angular 2 的 Cordova 应用程序

iphone - 寻找适用于 iphone 的良好 phonegap 教程

google-analytics - Google Analytics 不会将数据 View 拆分为单独的域

google-analytics - 谷歌分析 : Flag internal session and filter them in

google-analytics - 我可以在页面的任何位置设置 GA 自定义变量吗?

iphone - 如何在 PhoneGap 中创建 viewController 以与主视图一起使用

android - 从 CordovaPlugin 打开一个 Activity

javascript - 将 gtag 事件从跨域发送到父域