我正在尝试注册一个广播接收器,该广告接收器捕获Android从市场安装应用后启动的“com.android.vending.INSTALL_REFERRER”意图。
我在这里详细说明:http://code.google.com/mobile/analytics/docs/android/#referrals
但是,我无法使用Google Analytics,因此我创建了自己的解决方案。我已将以下内容添加到我的清单文件中:
<receiver android:name="com.test.Receiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
并创建了一个基本的BroadcastReceiver类:
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
String referrerString = extras.getString("referrer");
Log.w("TEST", "Referrer is: " + referrerString);
}
}
然而,当安装应用程序时,接收器似乎没有捕获Intent(如果Intent甚至广播?)并且我没有记录输出。
我在某个地方出错了还是市场在安装应用程序时不再启动这些Intent?
答案 0 :(得分:52)
我会尽力帮助像我这样的人无法使install_referrer工作,以及谁找不到有关这些功能的任何有用信息。
注意:
com.android.vending.INSTALL_REFERRER
将被捕获
在安装过程中,而不是在应用程序启动时
第一次。extras.getString("referrer")
..已修复,但内容可以是任何尊重http get语法的字符串值... referrer=thatsthevalue&thisisnot=xxx
上面的代码没问题,只是一些解释来完成信息:
<receiver>
标记必须位于。{1}}内
<application>
代码。但是这个
显然,您需要关注移动设备上的链接,完整测试的唯一方法是在市场上发布测试应用程序。
最后的个人信息。
我不明白为什么这些信息被完全省略,我希望Google会采取行动详细说明。
答案 1 :(得分:17)
这可能有点晚了,但您可以在不使用Google Play的情况下测试安装引荐来源,只需使用ADB:)
从adb.exe
运行此命令mob()
如果你在BroadcastReceiver中有日志设置,你会在LogCat中看到它弹出。
希望这有帮助!
答案 2 :(得分:5)
好的,所以我找到了Intent没有启动的原因。显然你必须使用与此处概述的相同的参数名称:http://code.google.com/mobile/analytics/docs/android/#referrals
你不能像我一样使用你自己的参数名:S
答案 3 :(得分:5)
我认为这些答案必须是在Android 3.1之前编写的 - 因为事情已经以一种导入方式发生了变化。
系统现在将应用程序标记为处于休眠状态 - 在用户通过运行(或放置小部件)显式激活应用程序之前,它们不会收到INSTALL_REFERRER或任何其他广播。
答案 4 :(得分:2)
我同意Google的文档并不是最好的。但是,我只能通过将应用程序实际上传到Market Place然后下载/安装它来获得触发的意图。意图在下载/安装后立即启动 - 用户无需启动应用程序。我也用这个来开始后台服务。
答案 5 :(得分:2)
请注意,这不是第一个启动意图,而只是一个Android市场相关的意图,它发送到我的谷歌Android市场。 如果您通过与Android市场不同的资源安装应用程序,它将无法启动。
使用您可以在其中构建的链接:http://code.google.com/mobile/analytics/docs/android/#android-market-tracking 从意图中获取引用者并将其拆分以获得不同的参数
referrer = intent.getStringExtra("referrer");
Map<String, String> params = Toolbox.getQueryMap(referrer);
P.S。您可以像某些应用程序那样阅读deviceid / IMEI来执行此操作。你不应该想要窥探你的用户。
答案 6 :(得分:1)
实际上可能会有任何链接,例如 market:// ... 或 http:// market ... 也可以正常工作。 引用者字段中的参数类型也无关紧要。它适用于那里的任何文本。
此事件类型“com.android.vending.INSTALL_REFERRER”的主要问题不是通过广播发送。此事件仅进入刚刚安装的应用程序。
UPD:只有一种方法可以测试它 - 将你的应用程序部署到市场中,然后将其安装到手机上。
答案 7 :(得分:0)
使用 Google Play Referrer API (2017年11月20日起)非常轻松,安全,因为answered here
答案 8 :(得分:0)
1) Broadcast receiver
public class InstallReferrerReceiver extends BroadcastReceiver {
String referrer = "";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() != null) {
if (intent.getAction().equals("com.android.vending.INSTALL_REFERRER")) {
Bundle extras = intent.getExtras();
if (extras != null)
{
referrer = extras.getString("referrer");
Log.e("Receiver Referral", "===>" + referrer);
PrefUtils.putPrefString(context, PrefUtils.PRF_REFERRER, referrer);
/*
If you want split username and code use below code...
for ex referrer="username12345678890"
if(referrer!=null)
{
String[] referrerParts = referrer.split("(?<=\\D)(?=\\d)");
String strName = referrerParts[0];
String strCode = referrerParts[1];
Log.e("Receiver Referral Code", "===>" + strName);
Log.e("Receiver Referral Name", "===>" + strCode);
PrefUtils.putPrefString(context, PrefUtils.PRF_REFERRER_CODE, strName);
PrefUtils.putPrefString(context, PrefUtils.PRF_REFERRER_NAME, strCode);
}*/
}
}
}
}
}
2) Define a receiver in your app manifest.in which com.android.vending.INSTALL_REFERRER
<receiver
android:name=".services.InstallReferrerReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
3) Test your app configuration running this command
adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n package_name/broadcast_receiver_path_with_packagename --es referrer "username1234567890"