Получить реферер после установки приложения из Android Market - PullRequest
68 голосов
/ 04 ноября 2010

Я пытаюсь зарегистрировать Broadcast Receiver, который ловит намерения "com.android.vending.INSTALL_REFERRER", запущенные Android после установки приложения из Маркета.

Я следую за деталями здесь: 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);
    }
}

Однако, когда приложение установлено, приемник, похоже, не улавливает намерение (если намерение даже транслируется?), И я не получаю вывод журнала.

Я что-то не так или Маркет больше не запускает эти Intents, когда приложение установлено?

Ответы [ 9 ]

52 голосов
/ 14 декабря 2010

Я бы попытался помочь тем, кто, как и я, не может заставить работать install_referrer, а кто не находит НИКАКОЙ полезной информации об этих функциях.

Примечания:

  1. Намерениеcom.android.vending.INSTALL_REFERRER будет перехвачено в процессе установки, а не при первом запуске приложения.
  2. Реферер ... extras.getString("referrer") .. фиксирован, но содержимым может быть любое строковое значение, соответствующееhttp get синтаксис ... referrer=thatsthevalue&thisisnot=xxx

Приведенный выше код в порядке, просто некоторые пояснения для дополнения информации:

  1. Манифест Android.Теги <receiver> должны быть внутри тегов <application>.
  2. Правильный URL для привязки к рынку - это не результаты известных форм Google в sdk

, а вот этот

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

Очевидно, что вам нужно перейти по ссылке с мобильного устройства, и единственный способ выполнить полный тест - это опубликовать тестовое приложение на рынке.

И последнее и личное примечание.

Я не понимаю, почему эта информация полностью опущена, и я надеюсь, что Google будет действовать для ее детализации.

17 голосов
/ 09 июня 2015

Это может быть немного поздно, но вы МОЖЕТЕ протестировать реферер установки без использования 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.

Надеюсь, это поможет!

5 голосов
/ 13 сентября 2012

Я думаю, что эти ответы должны быть написаны до Android 3.1 - потому что все изменилось одним способом.

Система теперь помечает приложение как неактивное, когда они установлены - они не будут получать INSTALL_REFERRER или любую другую трансляцию, пока пользователь явно не активирует приложение, запустив его (или разместив виджет).

5 голосов
/ 04 ноября 2010

Хорошо, я нашел причину, по которой Intent не запускался. Очевидно, что вы ДОЛЖНЫ использовать те же имена параметров, как указано здесь: http://code.google.com/mobile/analytics/docs/android/#referrals

Вы не можете использовать свои собственные имена параметров, как я делал: S

2 голосов
/ 15 июня 2011

Обратите внимание, что это не первое намерение запуска, а только намерение, связанное с рынком Android, которое отправлено моему рынку Google Android. Если вы установите приложение через ресурс, отличный от Android Market, оно не будет запускаться.

Используйте ссылку, которую вы можете построить там: 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, чтобы сделать это, как это делают некоторые приложения. Вы не должны шпионить за вашими пользователями.

2 голосов
/ 29 марта 2011

Я согласен, что документация Google не самая лучшая.Тем не менее, я смог добиться цели только путем загрузки приложения на Market Place, а затем его загрузки / установки.Намерение запускается сразу после загрузки / установки - пользователю не нужно запускать приложение.Я использую это для запуска фонового сервиса.

1 голос
/ 03 мая 2011

На самом деле могут быть любые ссылки, такие как market: //... или http://market. .. , либо работают нормально. Также не имеет значения, какие параметры будут в поле реферера. Он отлично работает с любым текстом там.

Основная проблема, которую этот тип события "com.android.vending.INSTALL_REFERRER" не отправляет широковещательно. Это событие относится ТОЛЬКО к только что установленному приложению.

UPD: И есть только один способ проверить это - развернуть приложение на Маркете и затем установить его на телефон.

0 голосов
/ 28 сентября 2018
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"
0 голосов
/ 20 апреля 2018

Использование Google Play Referrer API (с 20 ноября 2017 года) очень легко и безопасно, поскольку я ответил здесь

...