有這么一種需求,我們找廣告平臺來推銷我們的APP,我們想要知道這個廣告平臺的轉化率到底怎么樣。是否可以做到?如果APP是發布在Google Play的話,那么是可以做到的。
當用戶點擊一條廣告,并跳轉進了Google Play,Google Play可以獲取到廣告的鏈接,而這條鏈接里帶有referrer參數的話,referrer參數里的內容將在APP安裝完之后,就發給APP。如果APP有監聽這個廣播的對象的話,就能成功捕捉到安裝的來源信息。
Google Play Campaign Attribution介紹了一種解決方案,這種解決方案可以幫助開發者在Google Play的開發者控制臺(developer console)查看到相關信息。
一般的開發者也許讀完上面的教程就足矣,但若是沒搞懂安卓以及Google Play背后的機制,恐怕還有不少坑要踩,畢竟這個方案并不是很容易測試,只有發布到google play后才能真正的檢驗是否成功。(Testing Google Play Campaign Measurement介紹了一種并不完全可靠的方法。)
事實上,當用戶從Google Play安裝完APP后,Google Play作為一個APP本身,會觸發一個Intent
實例,Intent
實例的action
是"com.android.vending.INSTALL_REFERRER"
。這個Intent
實例并非簡單的發出,而是先通過queryBroadcastReceivers
的方式先獲取一個接受的隊列,然后只會對隊列的第一個發出Intent
實例!
如果一個APP中只有一個INSTALL_REFERRER
監聽對象,那還不會觸碰雷區,然后作為開發者,往往更可能接觸到一個已經接入眾多SDK的安卓項目,有多個Receiver監聽INSTALL_REFERRER
。對于這種情況,谷歌在文檔中已經說明了一種解決方案(只要一個receiver,其他的不要注冊,在代碼里顯示地(explicitly)整合進去,參考《Testing Google Play Campaign Measurement》一文最后的注意事項),但當某個SDK的Receiver又偏偏提供了另一種解決方案:
這個時候如果照著google提供的方案來實現的話,必然會導致一個死循環。(請自行思考原因)如果鄙棄谷歌的方案,而實現這種方案,也未嘗不可。appflyer正是這種方案的實現者之一,這種方案要實現的前提是,在AndroidManifest.xml中一定要注冊好所有的receiver,而不是像谷歌官方推薦的那種——只注冊一種。
官方文檔并沒有說明AndroidManifest.xml中書寫的前后順序是否會影響queryBroadcastReceivers
的前后順序,目前只能樂觀地認為它會。通過這種方案,把作為gate的receiver放在第一個,就可以完成。
經測試,android:PRiority不能影響queryBroadcastReceivers
的前后順序。
除了這種方案外,還有另一種方案,比較可靠,像Tapjoy等SDK采用這種方案:
以下代碼拷貝自Stackoverflow用戶Mathijs Vogelzang的回答
//This is Appbrain's receiver<receiver android:exported="true" android:name="com.appbrain.ReferrerReceiver" > <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> <meta-data android:name="forward.inmobi" android:value="com.inmobi.adtracker.androidsdk.IMAdTrackerInstallRefererReciever" /> <meta-data android:name="forward.custom" android:value="com.xgame.adproject2.TestReceiver" /></receiver>//個人補充:其他的不需要寫在Manifest, 除非要監聽其他的action。就是通過meta-data的方式,引入其他幾個receiver。
其實了解到這里,就能知道,就算不接入GA,也一樣可以實現數據的統計,只不過可能不能使用Google的相關服務而已。
新聞熱點
疑難解答