Как проверить реферер установки с помощью библиотеки Google installreferrer?

Существует множество примеров того, как протестировать способ определения реферера установки "по умолчанию", но нет примера, как протестировать библиотеку com.android.installreferrer:installreferrer.

Примеры вроде

adb shell am broadcast -a com.android.vending.INSTALL_REFERRER 
                       -n your.package.name/path.to.receiver --es referrer
                       --es referrer "EXTRA_STRING_VALUE"

не работают, потому что мы не знаем receiver путь. Так как это проверить?


person artem    schedule 30.08.2019    source источник


Ответы (2)


С InstallReferrerClient, похоже, нет любой BroadcastReceiver зарегистрированный в AndroidManifest.xml. Библиотека просто связывается со службой реферера установки системы ...

private static final String SERVICE_PACKAGE_NAME = "com.android.vending";
private static final String SERVICE_NAME = "com.google.android.finsky.externalreferrer.GetInstallReferrerService";
private static final String SERVICE_ACTION_NAME = "com.google.android.finsky.BIND_GET_INSTALL_REFERRER_SERVICE";

Клиент получает реферер utm_source=google-play&utm_medium=organic при ручной установке. BroadcastReceiver не выставлен (но у InstallReferrerService он должен быть).

Ключи необработанного Intent Bundle: install_referrer, referrer_click_timestamp_seconds и install_begin_timestamp_seconds, если вы хотите попробовать его эмулировать, но обратный вызов onInstallReferrerSetupFinished() даст результат косвенно.

В документации также говорится:

Информация о реферере установки будет доступна в течение 90 дней и не изменится, если приложение не будет переустановлено. Чтобы избежать ненужных вызовов API в вашем приложении, вы должны вызывать API только один раз во время первого выполнения после установки. Ваше приложение может прослушивать системную трансляцию Intent.ACTION_PACKAGE_FIRST_LAUNCH, чтобы определить первое выполнение приложения.


Таким образом, это должен быть intent-filter для action Intent.ACTION_PACKAGE_FIRST_LAUNCH, который впоследствии соединяет InstallReferrerClient с InstallReferrerService. Невозможно запустить Intent.ACTION_PACKAGE_FIRST_LAUNCH с помощью adb, потому что он фильтрует "строку защищенного широковещательного действия", поэтому он может быть запущен только при установке из Play Store.

Реализация, согласно документации, может выглядеть примерно так:

AndroidManifest.xml:

<receiver
    android:name=".receiver.PackageStatusReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_FIRST_LAUNCH"/>
    </intent-filter>
</receiver>

PackageStatusReceiver.java:

public class PackageStatusReceiver extends BroadcastReceiver implements InstallReferrerStateListener {

    protected static final String LOG_TAG = PackageStatusReceiver.class.getSimpleName();

    private InstallReferrerClient referrerClient;

    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction() != null) {
            if(intent.getAction().equals(Intent.ACTION_PACKAGE_FIRST_LAUNCH)) {
                this.referrerClient = InstallReferrerClient.newBuilder(context).build();
                this.referrerClient.startConnection(this);
            }
        }
    }

    @Override
    public void onInstallReferrerSetupFinished(int responseCode) {
        switch (responseCode) {
            case InstallReferrerClient.InstallReferrerResponse.OK:
                Log.d(LOG_TAG, "InstallReferrer Response.OK");
                try {
                    ReferrerDetails response = referrerClient.getInstallReferrer();
                    String referrer = response.getInstallReferrer();
                    long clickTimestamp = response.getReferrerClickTimestampSeconds();
                    long installTimestamp = response.getInstallBeginTimestampSeconds();
                    Log.d(LOG_TAG, "InstallReferrer " + referrer);
                    referrerClient.endConnection();
                } catch (RemoteException e) {
                    Log.e(LOG_TAG, "" + e.getMessage());
                }
                break;
            case InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED:
                Log.w(LOG_TAG, "InstallReferrer Response.FEATURE_NOT_SUPPORTED");
                break;
            case InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE:
                Log.w(LOG_TAG, "InstallReferrer Response.SERVICE_UNAVAILABLE");
                break;
            case InstallReferrerClient.InstallReferrerResponse.SERVICE_DISCONNECTED:
                Log.w(LOG_TAG, "InstallReferrer Response.SERVICE_DISCONNECTED");
                break;
            case InstallReferrerClient.InstallReferrerResponse.DEVELOPER_ERROR:
                Log.w(LOG_TAG, "InstallReferrer Response.DEVELOPER_ERROR");
                break;
        }
    }

    @Override
    public void onInstallReferrerServiceDisconnected() {
        Log.w(LOG_TAG, "InstallReferrer onInstallReferrerServiceDisconnected()");
    }
}

Чтобы проверить это, вам потребуются ссылки реферера в Play Store, а затем установка пакета через них ... иначе будет регистрироваться только реферер по умолчанию (кроме того, намерение даже не может быть запущено при правильной реализации клиента).

person Martin Zeitler    schedule 09.09.2019
comment
По какому параметру я получаю параметры UTM? - person Vikas Rai; 04.02.2020
comment
Я предлагаю переместить вызов referrerClient.endConnection () в блок finnaly в случае InstallReferrerClient.InstallReferrerResponse.OK, потому что response.getInstallReferrer () может генерировать исключение, и соединение останется открытым - person haksist; 29.07.2020
comment
Что это значит referrer information will be available for 90 days and won't change unless the application is reinstalled? Должен ли я хранить данные в локальном хранилище навсегда или мне нужно будет выполнить определенное действие через 90 дней? Пожалуйста помогите - person Jay Patel; 05.08.2020

Вы можете протестировать реферер установки, настроив внутреннюю тестовую версию своего приложения в консоли Play Market. После этого используйте измененную ссылку из Play Market URL Builder.

person Pavel Mokshanov    schedule 27.11.2019