理解
1.用户通过手机浏览器点击带有referrer的Url(如https://play.google.com/store/apps/details?id=com.xxx.xxx&referrer=test) (正常此网页下方在Play商店打开)
2.Google Play会记录附带的参数,(Finsky: [1] ifa.run(26): Capture referrer for com.xxx.xxx)
3.待用户下载安装之后,用户首次安装打开App时,Google Play将参数广播到App(Finsky: [1] ifb.run(12): Delivered referrer for com.xxx.xxx)。
代码实现(方式一,据说是Play Store 8.几之前才支持,未进行验证)
新建个类并继承BroadcastReceiver,用于接收referrer1
2
3
4
5
6
7
8
9
10
11public class InstallReferrerReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String referrer = intent.getStringExtra("referrer");
Logger.e("install referrer:" + referrer);
if (referrer != null && referrer.length() > 0) {
}
}
}
AndroidManifest.xml1
2
3
4
5
6
7
8<receiver
android:name=".InstallReferrerReceiver"
android:exported="true"
android:permission="android.permission.INSTALL_PACKAGES" >
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
代码实现(方式二)
1 | public class InstallReferrerUtil { |
关键神坑解决:
很多童鞋弄完可能收到
utm_source=(not%20set)&utm_medium=(not%20set)
很明显Google那边做了什么不见得人的处理,导致没把referrer传递过来
我们通过链接分析会发现:
- 1.用户访问:https://play.google.com/store/apps/details?id=com.xxx.xxx&referrer=test
- 2.点击该页面下面的按钮”在PLAY商店应用中打开”
- 3.然后细心点就会发现Google做了短链中转处理啊(处理就处理嘛,Google直接把&referrer=test弄没了,弄没了,心塞塞~)
https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.xxx.xxx&ddl=1&pcampaignid=web_ddl_1
所以,想实现可以传referrer,要么对上述的链接进行处理,如:https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.xxx.xxx
将link后面的链接加上&referrer=test,然后UrlEncode一下https://play.app.goo.gl/?link=https%3a%2f%2fplay.google.com%2fstore%2fapps%2fdetails%3fid%3dcom.xxx.xxx%26referrer%3dtest
不然或者用这种链接market://details?id=com.xxx.xxx&referrer=test
最后,你终于就能看到String referrer = details.getInstallReferrer();
获取到referrer了(当然你还得先找梯子上架到Google Play才能验证到)。