Правильное отслеживание ссылок на установку в 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 основано на вышеуказанном intent . Но значение, которое я получаю, это String utm_source=google-play&utm_medium=organic

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

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

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

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

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

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

Refferal URL –

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

Код для получения refferal –

 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&amp; referrer = utm_source% 3Dmobisoc% 26utm_content% 3D {transaction_id}% 26utm_campaign% 3D1

Просто посмотри мою ссылку. Если пользователь перейдет в игровой магазин по этой ссылке и установит приложение. В первый раз, когда приложение запустится, ваш метод 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». Таким образом, вы можете решить, какие данные вам нужно добавить при создании ссылки реферера.

Дайте мне знать, если вам нужно больше разъяснений 🙂

Лучше и надежнее отслеживать реферер через Firebase Dynamic Link.

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

https: //? домен / ссылка = your_deep_link & APN = package_name [& AMV = minimum_version] [& объявления = 1] [& ал = 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/android

Я использовал тег 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>