Можем ли мы установить INSTALL_REFERRER два раза в одном приложении для Android?

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

Возможно ли иметь две записи приемника вещания с фильтром намерения com.android.vending.INSTALL_REFERRER в Android?

Приемник Google Analytics

<receiver
    android:name="com.google.analytics.tracking.android.CampaignTrackingReceiver"
    android:exported="true" >
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>

Мой пользовательский широковещательный приемник.

<receiver
    android:name="com.xyz.broadcastreceiver.ReferrerCatcher"
    android:exported="true" >
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>

Ответ 1

Нет, у нас не может быть двух вещательных приемников Install Referrer. Для этого я создал собственный пользовательский широковещательный приемник для отслеживания источника Google Analytics Source и моих собственных материалов.

<receiver
    android:name="com.xyz.broadcastreceiver.ReferrerCatcher"
    android:exported="true" >
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>

В широковещательном приемнике ReferrerCatcher

public class ReferrerCatcher extends BroadcastReceiver {
    public static final String TAG = InstallReceiver.class.getCanonicalName();

    @Override
    public void onReceive(Context context, Intent intent) {

        // Google Analytics
        new CampaignTrackingReceiver().onReceive(context, intent);

        Log.d(TAG, intent.getExtras().getString("referrer");
        // my stuff here 
    }
}

Ответ 2

Я работал в аналогичном приложении, и после нескольких исследований я обнаружил, что мы могли бы просто удалить Приемник Google Analytics (так как он ничего не делает) и вместо этого использовать собственный пользовательский ресивер. И, конечно же, вы все равно можете отправить свое приложение в Google Analytics, выполнив ниже код:

public enum TrackerName {
    APP_TRACKER, // Tracker used only in this app.
    GLOBAL_TRACKER, // Tracker used by all the apps from a company. eg: roll-up tracking.
    ECOMMERCE_TRACKER, // Tracker used by all ecommerce transactions from a company.
}

HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();

synchronized Tracker getTracker(TrackerName trackerId) {
    if (!mTrackers.containsKey(trackerId)) {
        GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
        Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker("UA-xxxxxxxx-1")
                : (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(R.xml.global_tracker)
                : analytics.newTracker("UA-xxxxxxxx-1");
        mTrackers.put(trackerId, t);
    } return mTrackers.get(trackerId);
}

// Get tracker.
Tracker t = getTracker(TrackerName.APP_TRACKER);

// Set screen name.
t.setScreenName("some string");

// Send a screen view.
t.send(new HitBuilders.AppViewBuilder().build());

EDIT:

Ниже код показывает, как я объявляю широковещательный приемник в своем AndroidManifest.xml:

<!-- Used for Google Play Store Campaign Measurement-->;
<service android:name="com.google.android.gms.analytics.CampaignTrackingService" />
<receiver android:name=".app.service.CustomReceiver"
    android:exported="true">
    <intent-filter>
       <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>