2014-12-19 47 views
1

我试图让我的PhoneGap/Cordova应用程序的谷歌分析工作。如何配置我的Google Analytics帐户接受来自file:// url的请求?

默认情况下,analytics.js库不会发送来自file://类型网址的请求。我从this site发现,和它指向,那我可以得到分析LIB使用本地存储,而不是饼干,用于通过如此配置GA跟踪客户端ID的StackOverflow question

(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); 

现在我可以看到,从我的浏览器控制台,该库发送页面浏览量出谷歌分析。 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. 如何配置我的谷歌,Analytics帐户接受浏览器发送请求?
  2. 另外,有没有办法配置事物的浏览器端,以便它发送“dl = http:// ...”而不是“dl = file:// ...”,尽管它是来自file:// URL?

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

我知道有一个cordova plugin for google analytics,但我没有太多运气让这个人能够工作,而且,即使我能够使用它,我也需要我的应用程序能够立即登录到多个Google Analytics(分析)帐户,而我认为这个插件无法做到。

+0

为什么不使用分析插件呢?不知道该插件是否支持多个跟踪器,但可以完成 – jcesarmobile 2014-12-19 08:10:05

+0

我无法帮助Cordova,但您多久之前创建了一个帐户,尝试发送给它的帐户需要24-48小时才能开始显示数据。您可以手动发送内容:https://developers.google.com/analytics/devguides/collection/protocol/v1/ – DaImTo 2014-12-19 09:51:26

+0

@jcesarmobile - 我并不完全反对这个插件,但除了之前列出的原因外不使用它,还有这样一个事实,即它发送的数据不会显示在“实时”标签中(根据开发人员的说法),而且插件中的数据通常很慢显示一旦你得到它的工作)。另一方面,非插件技术距离工作还有几英寸距离,目前只有一次罢工。它还具有与我的移动网站(它共享代码)一样的工作方式的额外好处。这只是现在较低的水果。 – Troy 2014-12-19 16:42:33

回答

5

通过精缩谷歌代码闲逛之后,我发现原来的问题的答案,#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​​”是可以替换的,因为它很清楚它的工作应该是什么。

+0

我们可以只做'ga('set','checkProtocolTask​​',null);' – 2016-01-28 07:46:14

相关问题