Получите реферер после установки приложения из 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);
    }
}

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

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


person Jake    schedule 04.11.2010    source источник
comment
Я ответил на этот же вопрос здесь, stackoverflow.com/questions/3817030/   -  person DougW    schedule 27.09.2011
comment
Стоит отметить, что из-за ошибки в последней версии приложения Android Market строка реферера в настоящее время не работает. Вы можете пометить ошибку здесь, чтобы привлечь к ней внимание Google: code. google.com/p/android/issues/detail?id=19247   -  person plowman    schedule 03.10.2011
comment
Кто-нибудь знает, есть ли способ получить эту трансляцию, когда устанавливаются ДРУГИЕ приложения, помимо моего?   -  person Cassio Landim    schedule 03.07.2014
comment
Как сделать наоборот? То есть, как вы используете намерение для файла APK, чтобы пометить его в качестве источника перехода по вашему выбору?   -  person android developer    schedule 04.01.2015
comment
Подскажите, пожалуйста, какие параметры? На самом деле у меня такая же проблема, как и у вас.   -  person Pratik Dasa    schedule 15.04.2015
comment
это может помочь. используйте adb. developers.google.com/analytics/solutions/   -  person Rajat Sharma    schedule 12.02.2017


Ответы (8)


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

Примечания:

  1. Намерение com.android.vending.INSTALL_REFERRER будет обнаружено в процессе установки, а не при первом запуске приложения.
  2. Реферер ..._ 2_ .. фиксирован, но его содержимое может быть любым строковым значением, соответствующим синтаксису http get ..._ 3_

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

  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 постарается ее уточнить.

person Tobia    schedule 14.12.2010
comment
Для проверки см. Этот ответ: stackoverflow.com/questions/5890914/ - person emmby; 26.10.2011
comment
INSTALL_REFERRER работает, как описано в документации, и нет ничего плохого в URL-адресах, сгенерированных известными формами Google, потому что они предназначены для получения с помощью GA SDK. Ваш код работает только в том случае, если вы планируете публиковать в GA вручную или интегрироваться с другой аналитической платформой. См. Ссылку выше, если вы хотите поймать реферера и по-прежнему использовать GA SDK. - person Barry Fruitman; 09.12.2011
comment
тег <receiver> должен находиться внутри тега <application>. Это не объясняется в руководстве разработчика SDK для аналитики, и в противном случае компиляция не завершится ошибкой. Итак, спасибо, Тобия! - person Giorgos Kylafas; 27.06.2012
comment
См. Мой комментарий ниже - я считаю, что ваше примечание №1 больше не соответствует действительности для Android ›= 3.1. - person Tom; 13.09.2012
comment
Вы можете протестировать свое приложение еще до того, как выложить его на рынок. Вы можете отправить из оболочки: am broadcast -a com.android.vending.INSTALL_REFERRER -n com.yourapp.custom.referrer.receiver / .ReferrerReceiver --es referrer your_referrer_data - person MikeL; 19.10.2016

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

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

person Machine Tribe    schedule 09.06.2015
comment
в OS X пара значений ключа параметра -e не должна заключаться в двойные коды. Таким образом, приведенная выше команда будет: adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n your.package/path.to.your.BroadcastReceiver --es referrer test_referrer=test - person Alok Vaish; 20.06.2016

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

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

person Tom    schedule 13.09.2012
comment
Есть документация, подтверждающая это? Я по-прежнему не вижу ни одной трансляции, отправляемой до / после запуска установленного приложения, несмотря на то, что открыл Play Store с параметром реферера - person rycfung; 15.11.2012
comment
Том, я думаю, что это работает и тестировал в 4.x. Начиная с Android 3.1 были введены элементы управления запуском остановленных приложений. http://developer.android.com/about/versions/android-3.1.html Обратите внимание, что система добавляет FLAG_EXCLUDE_STOPPED_PACKAGES ко всем намерениям широковещательной передачи. Однако фоновая служба или приложение может переопределить это поведение, добавив флаг FLAG_INCLUDE_STOPPED_PACKAGES для широковещательных намерений, которым должно быть разрешено активировать остановленные приложения. Надеюсь, это может быть полезно. - person androidyue; 17.12.2013

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

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

person Jake    schedule 04.11.2010
comment
Можете ли вы помочь мне в моем вопросе stackoverflow.com/questions/10431018/ - person Khan; 03.05.2012
comment
Обновленная ссылка developers.google.com/analytics/devguides/ коллекция / android / - person eveliotc; 02.11.2012
comment
@Jake Подскажите, пожалуйста, какие параметры? На самом деле у меня такая же проблема, как и у вас - person Pratik Dasa; 15.04.2015

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

person JavaCoderEx    schedule 28.03.2011
comment
Можете указать, какой версией андроида вам удалось этого добиться? Сохраняется ли такое поведение для 2.3.3 и ICS (4.0)? - person rycfung; 15.11.2012

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

person white_gecko    schedule 15.06.2011

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

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

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

person Vagif    schedule 03.05.2011
comment
Я считаю, что INSTALL_REFERRER не работает для протокола http. По крайней мере, больше, если так было раньше. Обратитесь к этой документации и обратите внимание на пункт 2 в разделе "Известные проблемы": developers.google.com/analytics/devguides/collection/android/v2/ - person rycfung; 15.11.2012
comment
@rycfung Я думаю, это означает, что он не будет работать, когда вы нажмете кнопку «Установить» из Интернета, а не если вы откроете приложение магазина воспроизведения по веб-ссылке - person Zac Sweers; 20.02.2015

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

person Deven    schedule 20.04.2018