Com.android.vending.INSTALL_REFERRER не работает

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

Кажется, что все говорят, чтобы создать BroadcastListener с действием intent-filter com.android.vending.INSTALL_REFERRER. Вся документация по этому поводу подразумевает, что это возможность Google Analytics (документация находится в версии v1, но я могу только загрузить v2 SDK в этот момент... так, чтобы то, что я использую). Я не могу получить эти ссылки для передачи данных. У меня есть мой полный манифест и мой прослушиватель. Я включил Google Analytics только в том случае, если это было необходимо.

Это не работает вообще. Мой прослушиватель вещания никогда не вызывается, ничего не распечатывается в журналах. Помогите!

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.robotsidekick.webbrowser"
      android:versionCode="4"
      android:versionName="4.0">

<uses-sdk android:minSdkVersion="17"/>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:label="@string/app_name"
    android:icon="@drawable/ic_launcher">

    <activity
        android:name="WebBrowser"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

    <receiver
        android:exported="true"
        android:name="com.robotsidekick.webbrowser.InstallReceiver">
        <intent-filter>
            <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
    </receiver>

</application>

</manifest>

Широковещательный прослушиватель

public class InstallReceiver extends BroadcastReceiver
{
    private static final String TAG = "InstallReceiver";

    public void onReceive(Context context, Intent intent)
    {
        Log.e(TAG, "Context: " + context);
        Bundle extras = intent.getExtras();
        if (extras != null)
        {
            Log.e(TAG, "Extras:");
            for (String keys : extras.keySet())
            {
                Log.e(TAG, keys + " -> " + extras.get(keys));
            }
        }
        else
        {
            Log.e(TAG, "Extras are null");
        }
    }
}

Ответ 1

Итак, xbakesx говорит, что он работает, если его приемник расширяет com.google.analytics.tracking.android.AnalyticsReceiver.

Я думаю, что ключ состоит в том, что у намерения есть разрешения для... AnalyticsReceiver, и поэтому никакой другой класс, который не расширяет его, может занять намерение. Если вы посмотрите на свою тестовую трансляцию https://developers.google.com/analytics/solutions/testing-play-campaigns, она будет отображаться для этого класса.Забастовкa >

Если вы измените эту тестовую трансляцию, чтобы ваш класс заменил com.google.analytics.tracking.android.AnalyticsReceiver, вы можете ее получить. Самая большая проблема заключается в том, что они, похоже, заблокировали этот класс в бета-версии 4 или 5. Если у кого есть ссылка на бета-3 мы могли бы проверить это, или если xbakex смог подтвердить, играя с новыми банками, которые будут качать!

Update:

BAM! Таким образом, разрешения не являются проблемой. Я создал тестовый проект и использовал тестовое тестирование PlayStores для тестирования ссылок ссылок, которые вы можете здесь построить: https://developers.google.com/analytics/devguides/collection/android/v2/campaigns.

Приятно, что вам вообще не нужна никакая баня GA! Оформить свой тестовый проект здесь: https://github.com/twotoasters/AnalyticsTest/ В этом проекте также показано, как разобрать ссылку, чтобы получить всю необходимую информацию.

Ответ 2

После многих неудачных попыток я мог наконец увидеть переданные параметры реферала в logcat.

По пути я понял несколько вещей, я не слишком уверен, что я делаю это обряд или неправильно, но по некоторым причинам они сработали. Если кто-то все еще застрял, они могут получить некоторые указатели из моих знаний.

а. создавая пользовательский BroadcastReceiver, где вы можете подготовить намерение. (это будет выполнено только после того, как вы успешно уволили намерение Install_referrer из АБР для тестирования). Также убедитесь, что если вам нужно отправить сообщение назад на сервер реферера, оно должно быть в отдельном потоке.

    public class CustomBR extends BroadcastReceiver {

    private static final String D_TAG = "BR";

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(D_TAG, "CustomReceiver onReceive (context, intent)");
        try {

            String referrer = intent.getStringExtra("referrer");
            // pass the referrer string to another singleton class to post it to server
            HandleServerComm.getInstance().postData(referrer);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

В. обновите файл androidmanifest.xml, чтобы отобразить пользовательский получатель, который вы создали.

    <receiver android:exported="true" android:name="com.example.myapp.CustomBR" android:enabled="true">
        <intent-filter>
            <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
    </receiver>

С. убедитесь, что adb установлен правильно, чтобы проверить это в локальной среде. вам также понадобится устройство для подключения через USB с удаленной отладкой.

Д. запустите команду adb shell, чтобы удаленно транслировать install_referrer на устройстве и передавать его параметры.

Команда

adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n com.example.myapp/.CustomBR --es  "token" "sample_token" --es  "source" "banner"

Обратите внимание, что важными частями этой команды являются com.example.myapp/.CustomBR и --es "token" "sample_token", где --es - дополнительные параметры, которые отправляются вместе с намерением. первая цитата после --es - это имя querystring/parameter, а второе значение - значение. Аналогичным образом, если вам нужно добавить несколько значений, скопируйте их, как показано в примере выше.

Е. Наконец, самая важная часть, которая позволяла мне расстраиваться все время - приложение, установленное на самом устройстве. Ваше приложение должно быть установлено на устройстве, но не работает вообще. Для этого вам нужно будет "принудительно закрыть" приложение, а затем запустить команду оболочки adb, чтобы запустить программу install_referrer. thats, когда вы должны увидеть, что логарифм загорается с необходимыми данными.

F. Вы также можете удалить обновление в приложении Google Play Store и восстановить его до параметров factory. порой (не подтверждено) версия google play определяет, какие данные передаются в приложение через install_referrer или если реферер вызывается вообще.

Надеюсь, это поможет кому-то.

Ответ 3

Регистрация BroadcastReceiver в вашем приложении AndroidManifest.xml с фильтром намерения - это правильное решение для реселлеров приложений, использующих Google Analytics, или нет.

<receiver
    android:exported="true"
    android:name="com.yourcompany.package.receivers.InstallReceiver">
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>

Если вы уже используете Google Analytics, вы просто указываете андроид: name= "com.google.android.gms.analytics.CampaignTrackingReceiver" для вашего получателя и следующую услугу. Оба они включены в клиентскую библиотеку служб Google Play, поэтому для написания кода Java не существует. Если вы еще этого не сделали, вам также придется пройти через инструкции по первоначальной настройке для Google Analytics для вашего приложения.

 <service android:name="com.google.android.gms.analytics.CampaignTrackingService" />

Если вы не используете Google Analytics, вам необходимо определить свой собственный BroadcastReceiver в вашем Java-коде. Вы захотите, чтобы он проверял дополнительные функции по принятому намерению при реализации onReceive.

Параметр referrer в URL-адресе, который получен Google Play (магазин), является единственным параметром, переданным в приложение Android для реферала, поэтому очень часто кодируется несколько параметров внутри него. Для Google Analytics это означает отраслевые стандартные параметры utm_ *, но вы можете использовать другие. Здесь команда test adb, которую я обычно использую для открытия Google Play, чтобы установить и протестировать полный поток.

adb shell "am start -a android.intent.action.VIEW -d \"https://play.google.com/store/apps/details?id=com.somecompany.package&referrer=utm_source%253Dtest_campaign_source%2526utm_medium%253Dtest_campaign_medium%2526utm_term%253Dtest_campaign_term%2526utm_content%253Dtest_campaign_content%2526utm_campaign%253Dtest_campaign_name\""

Примечания к тестированию:

  • При тестировании этого потока очень важно проверить, что приведенная выше команда привела к выходу, в котором намерение было зарегистрировано на вашей консоли, при этом все данные FULL referrer все еще подключены. Это очень просто для того, чтобы экранирование было неправильным и тихо отбросило реферера.
  • Помните, что APK, должно быть, был установлен Google Play (Store) на тестируемое устройство (вы не можете загружать бонусы). Поэтому вам обычно нужно использовать свой канал распространения Alpha в Google Play, чтобы проверить это.
  • Важно отметить, что если устройство >= Honeycomb MR1, намерение INSTALL_REFERRER транслируется после запуска приложения, а не после установки приложения.
  • Вам нужно будет переустанавливать приложение каждый раз, когда вам нужно протестировать поток реферера.
  • Установить рефералы отслеживаются, когда приложение установлено из приложения Google Google Play, но не в веб-версии магазина.