it-swarm.com.ru

Получить реферер после установки приложения из Android Market

Я пытаюсь зарегистрировать широковещательный приемник, который перехватывает намерения "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, когда приложение установлено?

68
Jake

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

Заметки:

  1. Намерение com.Android.vending.INSTALL_REFERRER будет перехвачено Во время процесса установки, а не при первом запуске приложения
  2. Referrer ...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 будет действовать для ее детализации.

51
Tobia

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

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

17
Machine Tribe

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

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

5
Jake

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

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

5
Tom

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

Используйте ссылку, которую вы можете создать там: http://code.google.com/mobile/analytics/docs/Android/#Android-market-tracking Получите реферера из намерения и разберите его на части чтобы получить разные параметры

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

Постскриптум Для этого вам не нужно читать, чтобы прочитать deviceid/IMEI, как это делают некоторые приложения. Вы не должны шпионить за вашими пользователями.

2
white_gecko

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

2
JavaCoderEx

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

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

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

1
Vagif
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
Coldfin Lab

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

0
Deven