INSTALL_REFERRER BroadcastReceiver не работает

Я пытаюсь войти, что происходит от установки приложения из магазина. Но мой пользовательский приемник не работает, когда происходит фактическая установка из Play Market, однако он работает, когда я использую adb для трансляции чего-то подобного.

    adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n "package_name"/.InstallReceiver --es referrer "TOPKEK"
    Broadcasting: Intent { act=com.android.vending.INSTALL_REFERRER cmp="package_name"/.InstallReceiver (has extras) }

Приемник работает как положено:

    D/InstallReceiver: onReceive() called with: context = [android.app.ReceiverRestrictedContext@2af18590], intent = [Intent { act=com.android.vending.INSTALL_REFERRER flg=0x10 cmp="package_name"/.InstallReceiver (has extras) }extras=[Bundle{referrer='TOPKEK'}]]

Но при установке из Google Play App в журнале остается только сообщение от CampaignTrackingReceiver: "CampaignTrackingReceiver не зарегистрирован, не экспортирован или отключен. Отслеживание установки не возможно. Инструкции см. В http://goo.gl/8Rd3yj ".

Код получателя:

package "package_name";

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import com.adjust.sdk.AdjustReferrerReceiver;
import "package_name".util.LogHelper;

public final class InstallReceiver extends BroadcastReceiver {

    private static final String TAG = "InstallReceiver";

    @Override
    public void onReceive(final Context context, final Intent intent) {
        Log.d(TAG, "onReceive() called with: " + "context = [" + context + "], intent = [" + LogHelper.format(intent) + "]");
        new AdjustReferrerReceiver().onReceive(context, intent);
    }
}

Manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    package="package_name"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- normal permissions -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>

    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>

    <permission
        android:name="'package_name'.permission.C2D_MESSAGE"
        android:protectionLevel="signature"/>

    <uses-permission android:name="'package_name'.permission.C2D_MESSAGE"/>

    <application
        android:name=".CustomApplication"
        android:allowBackup="true"
        android:fullBackupContent="false"
        android:icon="@drawable/menu_icon_earny"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

        //activities here


        //gcm stuff

        <!-- Google Analytics -->
        <receiver     android:name="com.google.android.gms.analytics.AnalyticsReceiver"
            android:enabled="true">
            <intent-filter>
                <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH"/>
            </intent-filter>
        </receiver>

        <service
            android:name="com.google.android.gms.analytics.AnalyticsService"
            android:enabled="true"
            android:exported="false"/>

        <!--My install receiver that didn't work as intended-->
        <receiver
            android:name=".InstallReceiver"
            android:enabled="true"
            android:exported="true">

            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER"/>
            </intent-filter>

        </receiver>

    </application>

</manifest>

UPD: мне нужен мой ресивер, мне нужен этот лог, а не гугл ресивер.

1 ответ

Решение

редактировать

Ваш приемник работает - я только что проверил его в производстве. Чтобы протестировать приемник, вам нужно использовать URL с различными параметрами UTM, определенными в документации Google - вы не можете просто установить его прямо из Google Play. Вот доказательство от моего logcat:

0-16 09:08:45.408 13634 13634 D InstallReceiver: onReceive() called with: context = [android.app.ReceiverRestrictedContext@1cf1a5b], intent = [Intent { act=com.android.vending.INSTALL_REFERRER flg=0x10 pkg=com.cashcowlabs.earny cmp=com.cashcowlabs.earny/.InstallReceiver (has extras) }extras=[Bundle{referrer='utm_source=google&utm_medium=cpc&utm_term=podcast%2Bapps&utm_content=displayAd1&utm_campaign=podcast%2Bgeneralkeywords'}]]

Оригинальный ответ

Ошибка ("CampaignTrackingReceiver не зарегистрирован.."), на которую вы ссылаетесь, вводит в заблуждение и не означает, что ваш приемник не работает.

Похоже, вы используете SDK Google Analytics, который, вероятно, при инициализации проверяет манифест вашего приложения, ищет CampaignTrackingReceiverи когда он не найден, он дает вам это предупреждение. Это всего лишь предупреждение, и это случай, когда разработчики Google Analytics SDK пытаются помочь вам, но в итоге запутывают вас больше:).

Если вы хотите, чтобы приемник вещания GA работал, вы можете изменить свой код, чтобы делегировать ему намерение реферера, так же, как вы делаете для Adjust:

@Override
public void onReceive(final Context context, final Intent intent) {
    Log.d(TAG, "onReceive() called with: " + "context = [" + context + "], intent = [" + LogHelper.format(intent) + "]");
    new AdjustReferrerReceiver().onReceive(context, intent);
    new CampaignTrackingReceiver().onReceive(context, intent);
}

Похоже, согласно документам Google, вы также должны добавить их сервис в свой манифест. Я думаю, что CampaignTrackingReceiver делегирует свою работу службе, но вы можете проверить декомпилированную флягу, чтобы узнать для себя. Добавьте это в свой манифест, прямо там, где вы определяете другой сервис GA:

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

Предупреждение о том, что получатель не найден, все еще может появиться, но пока ваши настройки установлены в Adjust и Google Analytics (протестируйте его, загрузив приложение с помощью

Другие вопросы по тегам