通过自定义营销URL下载应用时无法获取INSTALL_REFERRER
咱们先把你的问题和现有配置理清楚:
我希望在通过营销URL下载应用时获取referrer详情,已创建带有
INSTALL_REFERRER意图过滤器的广播接收器,但目前无法获取INSTALL_REFERRER。
我的营销URL:http://hrt.glserv.info/com.cc.rummycentral?referrer=ewriewriwer&pid=vcommission_rummytest&af_r=http%3A%2F%2Frc.glserv.info%2Fdownload-apk%2F
你已配置的Manifest代码
<receiver android:name="com.cc.rummycentral.service.DownloadReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER"></action> </intent-filter> </receiver>
DownloadReceiver类代码
public class DownloadReceiver extends BroadcastReceiver { private static String TAG = "referrer"; public DownloadReceiver(){ Log.w(TAG, "INSIDE DownloadReceiver()"); } @Override public void onReceive(Context context, Intent intent) { try { Log.w(TAG, "INSIDE onReceive"); if (null != intent && intent.getAction().equals("com.android.vending.INSTALL_REFERRER")) { Log.w(TAG, "YES, IT IS AN INSTALL EVENT"); String rawReferrer = intent.getStringExtra("referrer"); if (rawReferrer != null) { String referrer = URLDecoder.decode(rawReferrer, "UTF-8"); Log.w(TAG,"HEY Received Referrer: " + referrer); } } } catch (Exception var6) { var6.printStackTrace(); Log.e(TAG, "EXP: "+var6.toString()); } } }
接下来咱们一步步排查可能的问题:
先确认测试方式是否正确
INSTALL_REFERRER广播只在用户从Google Play商店(含官方测试轨道)通过带referrer的链接安装应用时才会触发。如果你是直接安装本地APK(比如adb推送、微信传输安装),这个广播根本不会发送。正确的测试流程应该是:- 把应用上传到Google Play的内部测试/封闭测试轨道
- 使用你的营销链接跳转至Play商店,完成下载安装
- 安装完成后立刻查看Logcat日志
检查广播接收器的注册有效性
查看Logcat中是否有INSIDE DownloadReceiver()的日志:- 如果没有,说明接收器的类路径在Manifest中写错了,仔细核对
com.cc.rummycentral.service.DownloadReceiver是否和你实际的类包名完全一致 - 如果有构造函数日志,但
INSIDE onReceive没出现,说明广播没被发送,大概率是测试渠道的问题
- 如果没有,说明接收器的类路径在Manifest中写错了,仔细核对
优化接收器的优先级
如果你集成了第三方归因SDK(比如AppsFlyer、Adjust),它们也会监听INSTALL_REFERRER广播,可能会先于你的接收器拦截并消费广播。可以给你的接收器添加优先级属性,确保它先被触发:<receiver android:name="com.cc.rummycentral.service.DownloadReceiver" android:exported="true" android:priority="1000"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER"></action> </intent-filter> </receiver>考虑替换为更可靠的Install Referrer API
由于广播机制本身存在易被拦截、可靠性低的问题,Google现在更推荐使用Google Play Install Referrer API来获取referrer信息。这个API可以在应用启动时主动调用获取,不受广播拦截影响,还能拿到更多归因数据。你可以直接按照官方文档集成,在应用启动的入口(比如Application类的onCreate)调用API获取referrer。
内容的提问来源于stack exchange,提问作者Nikhil Sharma

