Подтвердить что ты не робот

Правильное отслеживание ссылок на установку в Play Маркете

У меня есть простая задача: я хочу отслеживать идентификатор реферала установки приложения и передавать его на бэкэнд.

Что я сделал: я создал ссылку с дополнительным параметром referrer и добавил ее к приглашающей ссылке. Когда он открывается, javascript определяет, является ли браузер браузером Android, а затем готовит intent и перенаправляет на это намерение. При подготовке намерения поле referrer извлекается из URL-адреса и добавляется к intent следующим образом:

intent://scan/#Intent;scheme=com.example.android;package=com.example.android&referrer=4;end

И вот мой код для BroadCastReceiver:

public class InstallReferrerReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        TinyDB tinyDB = new TinyDB(context);
        String referrer = intent.getStringExtra("referrer");
        tinyDB.putString(AppConstants.REFERRAL_ID, referrer);
        tinyDB.putBoolean(AppConstants.REFERRAL_SENT, false);
    }
}

Итак, то, что я ожидаю получить здесь как значение referrer, равно 4 на основе вышеперечисленного intent. Но значение, которое я получаю, это String utm_source=google-play&utm_medium=organic

Что я делаю неправильно и как его исправить, чтобы получить правильное значение для поля referrer?

Edit

У меня нет проблем при создании URL-адреса или извлечении значений из поля referrer после установки приложения.

Как только ссылка на приглашение нажата на любую кнопку, нажмите или откроется непосредственно в мобильном браузере, я использую выше, чтобы "либо открыть приложение, если оно уже установлено, либо открыть страницу приложения в приложении Play Store для пользователей, чтобы установить его".

Проблема заключается в том, как передать значение поля referrer из ссылки приглашения в приложение Play Store с помощью вышеуказанного намерения, чтобы Play Store получил это значение и передал его в приложение, когда оно установлено.

4b9b3361

Ответ 1

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

Реферальный URL -

https://play.google.com/store/apps/details?id=com.mypackage&referrer=utm_source%3Dmobisoc%26utm_content%3D{transaction_id}%26utm_campaign%3D1

Код для получения реферала -

public static final String KEY_UTM_SOURCE = "utm_source";
public static final String KEY_UTM_CONTENT = "utm_content";
public static final String KEY_UTM_CAMPAIGN = "utm_campaign";
public void onReceive(Context context, Intent intent) {
    Utils.log("Referral Received");
    try {
        String referrer = intent.getStringExtra("referrer");
        if (referrer != null && !referrer.equals("")) {
            Utils.log("Referral Received - " + referrer);
            String[] referrerParts = referrer.split("&");
            String utmSource = getData(KEY_UTM_SOURCE, referrerParts);
            String utmContent = getData(KEY_UTM_CONTENT, referrerParts);
            String utmCampaign = getData(KEY_UTM_CAMPAIGN, referrerParts);
            if (utmSource != null && utmSource.equals("mobisoc")) {
                sendLogToMobisocServer(context, utmContent);
            } else if (utmSource != null && utmSource.equals("app_share")) {
                RawStorageProvider.getInstance(context).dumpDataToStorage(RaghuKakaConstants.REFFERAL_FOR, utmContent);
            }
            updateRKServerForReferral(context, utmSource, utmCampaign, utmContent);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private String getData(String key, String[] allData) {
    for (String selected : allData)
        if (selected.contains(key)) {
            return selected.split("=")[1];
        }
    return "";
}

Теперь самая важная часть тестирования. Вы можете проверить реферала локально. Просто нужно подключить телефон, открыть подсказку оболочки с помощью adb shell. И транслировать реферальные данные. Вот пример последовательности команд:

C:\Users\Neo\Desktop>adb shell
$ am broadcast -a com.android.vending.INSTALL_REFERRER -n com.mypackage/<className of your ReferralReceiver with package> --es "referrer" "utm_source%3Dmobisoc%26utm_content%3D{transaction_id}%26utm_campaign%3D1"

Дополнительный -

https://play.google.com/store/apps/details?id=com.mypackage& referrer = utm_source% 3Dmobisoc% 26utm_content% 3D {action_id}% 26utm_campaign% 3D1

Просто посмотрите мою ссылку. Если пользователь перейдет в PlayStore по этой ссылке, и установите приложение. Затем в первый раз, когда приложение запустится, ваш метод onReceive будет запущен автоматически, и вы получите все данные после referrer =.

Трансляция -

$ am broadcast -a com.android.vending.INSTALL_REFERRER -n com.mypackage/<className of your ReferralReceiver with package> --es "referrer" "utm_source%3Dmobisoc%26utm_content%3D{transaction_id}%26utm_campaign%3D1"

Для его тестирования вам не нужно публиковать ваше приложение в playstore. Просто поместите точку отладки в первую точку onReceive, запустите в режиме отладки и запустите последовательности команд, которые я опубликовал, вы получите все данные после тега "referrer". Таким образом, вы можете решить, какие данные вам нужно добавить при создании реферальной ссылки.

Дайте мне знать, если вам понадобятся дополнительные разъяснения :)

Ответ 2

Лучше и надежнее отслеживать реферер через динамическую ссылку Firebase.

Ниже этого, как это работает.

https://domain/?link=your_deep_link&apn=package_name[&amv=minimum_version][&ad=1][&al=android_link][&afl=fallback_link]

Вот пример ссылки после заполнения параметров.

https://example.app.goo.gl/?link=https://www.example.com/someresource&apn=com.example.android&amv=3&al=exampleapp://someresource&ibi=com.example.ios&isi=1234567&ius=exampleapp

Конечно, вы можете укоротить ссылку на что-то вроде https://example.app.goo.gl/abcde непосредственно в консоли Firebase. Для настройки динамической связи потребуется всего несколько минут.

Затем в приложении Android на основном Activity вы можете вызвать AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, false), чтобы получить информацию о ссылке.

Более подробную информацию можно найти здесь https://firebase.google.com/docs/dynamic-links/

Ответ 3

Я использовал тег utm

вы можете увидеть полный источник в https://github.com/dheeraj9198/Utm-Test

Я предоставляю базовый код

public class CustomCampaignTrackingReceiver extends BroadcastReceiver {
    private static final String TAG = CustomCampaignTrackingReceiver.class.getSimpleName();
    private static final Logger LOGGER = LoggerFactory.getLogger(TAG);
    private static final Marker MARKER = MarkerFactory.getMarker(TAG);


    @Override
    public void onReceive(Context context,final Intent intentx) {
        LOGGER.info(MARKER, "on Receive called");
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    for (String key : intentx.getExtras().keySet()) {
                        try {
                            LOGGER.info(MARKER, key + " => " + String.valueOf(intentx.getExtras().get(key)));
                        } catch (Exception e) {
                            LOGGER.error(MARKER, "caught exception in on key retrieval ", e);
                        }
                    }
                } catch (Exception e) {
                    LOGGER.error(MARKER, "caught exception in key loop ", e);
                }
            }
        });
        executorService.shutdown();
    }
}

-------------------------- Manifest -------------------- -------------------
     

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

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

Ответ 4

Имя Маллик Хуссейн Вилл Джайнал Гач По Бенда Гач Пс Чопра Дист Уттар Динаджпур Пин 733207