从Android电子市场安装应用后获取推荐人

时间:2010-11-04 01:28:50

标签: android google-play install google-play-services referrer

我正在尝试注册一个广播接收器,该广告接收器捕获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?

9 个答案:

答案 0 :(得分:52)

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

注意:

  1. 意图com.android.vending.INSTALL_REFERRER将被捕获 在安装过程中,而不是在应用程序启动时 第一次。
  2. 引荐来源... extras.getString("referrer") ..已修复,但内容可以是任何尊重http get语法的字符串值... referrer=thatsthevalue&thisisnot=xxx
  3. 上面的代码没问题,只是一些解释来完成信息:

    1. Android Manifest。 <receiver>标记必须位于。{1}}内 <application>代码。
    2. 链接市场的正确网址不是sdk
    3. 中着名的Google表单的结果

      但是这个

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

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

      最后的个人信息。

      我不明白为什么这些信息被完全省略,我希望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"