从 Android Market 安装应用后获取推荐人
Posted
技术标签:
【中文标题】从 Android Market 安装应用后获取推荐人【英文标题】:Get referrer after installing app from Android Market 【发布时间】:2011-05-04 20:04:33 【问题描述】:我正在尝试注册一个广播接收器,该接收器在从市场安装应用程序后捕获由 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?
【问题讨论】:
我在这里回答了同样的问题***.com/questions/3817030/… 值得注意的是,由于最新版本的 Android Market 应用程序中的错误,引荐来源字符串目前无法使用。您可以在此处为该错误加注星标以帮助引起 Google 的注意:code.google.com/p/android/issues/detail?id=19247 有谁知道在安装除我之外的其他应用程序时是否有办法接收此广播? 你如何做相反的事情?意思是,您如何在 APK 文件上使用意图,将其标记为您选择的引用者? 你能告诉我哪些参数吗?其实我和你有同样的问题。 【参考方案1】:我会尽力帮助像我一样无法使 install_referrer 正常工作以及找不到有关这些功能的任何有用信息的人。
注意事项:
-
意图
com.android.vending.INSTALL_REFERRER
将被捕获
在安装过程中,而不是在应用程序启动时
第一次。
referrer ...extras.getString("referrer")
.. 是固定的,但内容可以是任何符合 http get 语法的字符串值 ...referrer=thatsthevalue&thisisnot=xxx
上面的代码没问题,只是一些解释来补全信息:
-
Android 清单。
<receiver>
标签必须在
<application>
标签。
链接市场的正确url不是sdk中著名的google表单的结果
但是这个
http://market.android.com/details?id=your.application.package.name&referrer=my_referrer_finally_works_fine
显然,您需要在移动设备上点击链接,而完整测试的唯一方法是在市场上发布测试应用程序。
还有最后的个人说明。
我不明白为什么这些信息被完全省略了,我希望谷歌会采取行动详细说明。
【讨论】:
要测试,请参阅此答案:***.com/questions/5890914/… INSTALL_REFERRER 按文档说明工作,“著名的谷歌表单”生成的 URL 没有任何问题,因为它们被设计为由 GA SDK 接收。仅当您计划手动发布到 GA 或与其他分析平台集成时,您的代码才有效。如果您想捕获引荐来源并仍然使用 GA SDK,请参阅上面的链接。<receiver>
标签必须在<application>
标签内。这在分析 SDK 开发指南中没有解释,如果您不这样做,编译也不会失败。所以,谢谢托比亚!
在下面查看我的评论 - 我相信您的 Note #1 不再适用于 Android >= 3.1。
您甚至可以在将应用上传到市场之前对其进行测试。您可以从外壳发送:am broadcast -a com.android.vending.INSTALL_REFERRER -n com.yourapp.custom.referrer.receiver/.ReferrerReceiver --es "referrer" "your_referrer_data"【参考方案2】:
这可能有点晚了,但您可以在不使用 Google Play 的情况下测试安装引荐来源网址,只需使用 ADB :)
从 adb.exe 运行它
adb shell
am broadcast -a com.android.vending.INSTALL_REFERRER -n your.package/path.to.your.BroadcastReceiver --es "referrer" "test_referrer=test"
如果您在 BroadcastReceiver 中设置了日志记录,您将在 LogCat 中看到它的弹出窗口。
希望这会有所帮助!
【讨论】:
在 OS X 上 -e 选项的键值对不需要用双码括起来。所以上面的命令将是:adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n your.package/path.to.your.BroadcastReceiver --es referrer test_referrer=test
【参考方案3】:
我认为这些答案一定是在 Android 3.1 之前编写的 - 因为事情已经以一种导入方式发生了变化。
系统现在在安装时将应用标记为休眠 - 在用户通过运行(或放置小部件)明确激活应用之前,它们不会收到 INSTALL_REFERRER 或任何其他广播。
【讨论】:
有任何文档支持吗?尽管使用推荐人参数打开 Play 商店,但在启动已安装的应用程序之前/之后,我仍然看不到任何广播发送 Tom,我认为它可以工作并且已经在 4.x 中进行了测试。自 Android 3.1 以来,已引入对已停止应用程序的启动控件。 http://developer.android.com/about/versions/android-3.1.html 请注意,系统将 FLAG_EXCLUDE_STOPPED_PACKAGES 添加到所有广播意图。但是,后台服务或应用程序可以通过将 FLAG_INCLUDE_STOPPED_PACKAGES 标志添加到应该允许激活停止的应用程序的广播意图来覆盖此行为。希望这会有所帮助。【参考方案4】:好的,我找到了 Intent 没有启动的原因。显然,您必须使用此处概述的相同参数名称:http://code.google.com/mobile/analytics/docs/android/#referrals
你不能像我一样使用自己的参数名称:S
【讨论】:
你能帮我解决我的问题吗***.com/questions/10431018/… 更新链接developers.google.com/analytics/devguides/collection/android/… @Jake 你能告诉我哪些参数吗?其实我和你有同样的问题【参考方案5】:我同意 Google 的文档不是最好的。但是,我只能通过将应用程序实际上传到市场然后下载/安装它来获得触发意图。 Intent 会在下载/安装后立即启动 - 用户不必启动应用程序。我也用它来启动后台服务。
【讨论】:
您能指出您在哪个版本的 android 上能够实现这一目标吗?这种行为是否仍然适用于 2.3.3 和 ICS (4.0)?【参考方案6】:请注意,这不是第一个启动意图,而只是发送到我的 google android 市场的与 android 市场相关的意图。 如果您通过与 android 市场不同的资源安装该应用程序,它将不会触发。
使用您可以在那里建立的链接:http://code.google.com/mobile/analytics/docs/android/#android-market-tracking 从intent中获取referrer,拆开得到不同的参数
referrer = intent.getStringExtra("referrer");
Map<String, String> params = Toolbox.getQueryMap(referrer);
附:您无需像某些应用程序那样阅读设备ID/IMEI 来执行此操作。你不应该想窥探你的用户。
【讨论】:
【参考方案7】: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"
【讨论】:
【参考方案8】:实际上,market://... 或 http://market... 等任何链接都可以正常工作。 此外,引用字段中的参数类型也无关紧要。它适用于其中的任何文本。
此事件类型 "com.android.vending.INSTALL_REFERRER" 不通过广播发送的主要问题。此事件仅进入刚刚安装的应用程序。
UPD:只有一种方法可以对其进行测试 - 将您的应用程序部署到市场中,然后将其安装到手机上。
【讨论】:
我相信 INSTALL_REFERRER 不适用于 http 协议。至少,如果以前是这样的话,现在不会了。请参阅本文档,并注意已知问题下的第 2 点:developers.google.com/analytics/devguides/collection/android/v2/… @rycfung 我认为这仅意味着当您从网络单击“安装”时它不起作用,而不是从网络链接打开 Play 商店应用程序【参考方案9】:使用 Google Play Referrer API(从 2017 年 11 月 20 日起)非常轻松安全地使用我 answered here
【讨论】:
【参考方案10】:com.android.vending.INSTALL_REFERRER
不再广播since March 2020。有关详细信息和替代方案,请参阅此SO answer。
【讨论】:
以上是关于从 Android Market 安装应用后获取推荐人的主要内容,如果未能解决你的问题,请参考以下文章
在模拟器 2.2 中安装 android market 应用程序
工信部:将统一 Android 消息推送标准;Google:6月30日停止对Android Market应用支持