2014-12-19 35 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

相關問題