从Android电子市场安装应用后获取引荐来源

我正在尝试注册一个广播接收器,捕获Android应用程序从市场上安装应用程序后发起的“com.android.vending.INSTALL_REFERRER”intents。

我正在关注这里的详细信息: http : //code.google.com/mobile/analytics/docs/android/#referrals

不过,我无法使用Google Analytics(分析),因此我创build了自己的解决scheme。 我已经将以下内容添加到我的清单文件中:

<receiver android:name="com.test.Receiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver> 

并创build了一个基本的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); } } 

但是,安装应用程序时,接收器似乎没有捕获意图(如果意图甚至广播吗?),我得不到logging输出。

我在某个地方出了问题,或者市场在安装应用程序时不再启动这些内容?

我会尽力帮助像我这样的人,使install_referrer无法工作,以及谁不能find有关这些function的有用信息。

笔记:

  1. 意图com.android.vending.INSTALL_REFERRER将在安装过程中捕获,而不是在应用程序第一次启动时捕获。
  2. 引用者… extras.getString("referrer") ..是固定的,但内容可以是任何string值,尊重HTTP获取语法… referrer=thatsthevalue&thisisnot=xxx

上面的代码是可以的,只需要一些解释来完成信息:

  1. Android清单。 <receiver>标签必须位于<application>标签内。
  2. 链接市场的正确url不是sdk中着名的google表单的结果

但这一个

http://market.android.com/details?id=your.application.package.name&referrer=my_referrer_finally_works_fine

显然,您需要遵循移动设备的链接,完成testing的唯一方法是在市场上发布testing应用程序。

最后还有个人笔记。

我不明白为什么这些信息被完全省略,我希望谷歌将详细说明。

这可能有点晚,但是您可以在不使用Google Play的情况下testing安装推荐链接,只需使用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中设置了日志logging,则会在LogCat中看到它。

希望这可以帮助!

好,所以我find了Intent没有启动的原因。 显然,您必须使用与此处列出的相同的参数名称: http : //code.google.com/mobile/analytics/docs/android/#referrals

你不能像我一样使用你自己的参数名称:S

我认为这些答案一定是在Android 3.1之前编写的 – 因为事情已经改变了一种导入方式。

系统现在将应用程序标记为处于hibernate状态 – 它们将不会收到INSTALL_REFERRER或任何其他广播,直到用户通过运行(或放置小部件)显式激活应用程序。

我同意Google的文档不是最好的。 不过,我只能通过实际上传应用程序到市场,然后下载/安装它来获得意图。 意图在下载/安装后立即启动 – 用户不必启动应用程序。 我正在使用它来启动后台服务。

请注意,这不是第一个启动意图,但只有一个Android市场相关的意图,这是发送我的谷歌Android市场。 如果你通过不同于android市场的资源来安装应用程序,它不会触发。

使用你可以在那里build立的链接: http : //code.google.com/mobile/analytics/docs/android/#android-market-tracking从意图获取引用,并拿开它来获得不同的参数

 referrer = intent.getStringExtra("referrer"); Map<String, String> params = Toolbox.getQueryMap(referrer); 

PS你不需要阅读阅读deviceid / IMEI来做到这一点,因为有些应用程序。 你不应该想要窥探你的用户。

其实可以有任何链接像市场:// …或者http:// market …或者工作正常。 另外,在引荐者字段中,什么样的参数是无关紧要的。 它可以在那里的任何文本正常工作。

此事件types“com.android.vending.INSTALL_REFERRER”不通过广播发送的主要问题。 这个事件只进入刚安装的应用程序。

UPD:只有一种方法来testing它 – 将您的应用程序部署到市场,然后将其安装在手机上。