从安卓市场安装应用程序后获取引用

我正在尝试注册一个 Broadcast Receiver,它可以捕捉 Android 在从 Market 安装应用程序后启动的“ com.Android.vending.INSTALL _ REFERRER”意图。

我在这里跟随的细节: http://code.google.com/mobile/analytics/docs/android/#referrals

然而,我不能使用谷歌分析,所以我创建了自己的解决方案。我已将以下内容添加到清单文件中:

<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);
}
}

然而,当应用程序安装时,接收器似乎并没有捕捉到意图(如果意图是广播?)没有日志输出。

我是不是哪里出错了,或者当应用程序安装后,市场不再启动这些意图了?

86266 次浏览

我找到了意图号没有发射的原因。显然,您必须使用与此处概述的相同的参数名称: http://code.google.com/mobile/analytics/docs/android/#referrals

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

我会试着帮助那些像我一样不能使 install _ Referrer 工作的人,以及那些找不到任何有关这些特性的有用信息的人。

备注:

  1. 意图 com.android.vending.INSTALL_REFERRER将被捕获 在安装过程中,而不是在应用程序启动 第一次。
  2. 引用... extras.getString("referrer"). . 是固定的,但内容可以是任何符合 http get 语法的字符串值... referrer=thatsthevalue&thisisnot=xxx

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

  1. <receiver>标记必须位于 <application>标签。
  2. 正确的链接市场的网址不是著名的谷歌在 sdk 表单的结果

但这个

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

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

还有最后一封私人信件。

我不明白为什么这些信息被完全遗漏,我希望谷歌将采取行动,详细说明。

我同意 Google 的文档不是最好的。然而,我只能通过将应用程序上传到 Market Place,然后下载/安装它来获得开火的意图。意图在下载/安装后立即启动-用户不必启动应用程序。我也用这个来启动一个后台服务。

实际上,可以有任何链接,如 市场://..。Http://market...要么工作良好。 而且,在参考字段中有什么样的参数并不重要。任何文本都可以。

此事件类型 “ com.android.vending.INSTALL _ REFERRER”不通过广播发送的主要问题。此事件仅进入刚刚安装的应用程序。

UPD: 只有一种方法可以测试它-将你的应用程序部署到市场,然后在手机上安装它。

请注意,这不是第一开始的意图,但只是一个安卓市场相关的意图,这是发送我的谷歌安卓市场。 如果你通过不同于安卓市场的其他资源安装应用程序,它将不会启动。

使用你可以在那里建立的链接: < a href = “ http://code.google.com/mobile/analytics/docs/android/# android-market-trace”rel = “ nofollow”> http://code.google.com/mobile/analytics/docs/android/#android-market-tracking 从意图中获取引用并将其分解以获取不同的参数

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

附言。您不需要像某些应用程序那样通过读取 deviceid/IMEI 来完成此操作。你不应该监视你的用户。

我认为这些答案一定是在 Android 3.1出现之前就已经写好了——因为事情已经在一个重要的方面发生了变化。

系统现在在安装应用程序时将其标记为休眠状态——它们不会接收 INSTALL _ REFERRER 或任何其他广播,直到用户通过运行应用程序(或放置小部件)显式激活该应用程序。

这可能有点晚,但你可以不用 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 中看到它弹出。

希望这个能帮上忙!

使用 Google Play Referrer API(由2017年11月20日起)非常容易和安全,如 i 在这里回答

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"

com.android.vending.INSTALL_REFERRER不再广播了 从2020年3月开始。请参阅 回答我了解更多细节和备选方案。