Android Установить уникальность отслеживания рефералов
В моем приложении реализовано отслеживание реферальных ссылок с сайта: https://developers.google.com/analytics/devguides/collection/android/v4/campaigns
мой реферальный получатель:
public class ReferrerReceiver extends BroadcastReceiver
{
private static final ObservableChanged _observable = new ObservableChanged();
//--------------------------------------------------------------------------
public static Observable getObservable()
{
return _observable;
}
//--------------------------------------------------------------------------
public static String getReferrer(Context context)
{
// Return any persisted referrer value or null if we don't have a referrer.
return context.getSharedPreferences("referrer", Context.MODE_PRIVATE).getString("referrer", null);
}
//--------------------------------------------------------------------------
public ReferrerReceiver()
{
Logger.log(null, "ReferrerReceiver.ReferrerReceiver()");
}
//--------------------------------------------------------------------------
@Override public void onReceive(Context context, Intent intent)
{
Logger.log(context, "ReferrerReceiver.onReceive(Context, Intent)", intent);
try
{
// Make sure this is the intent we expect - it always should be.
if ((null != intent) && (intent.getAction().equals("com.android.vending.INSTALL_REFERRER")))
{
// This intent should have a referrer string attached to it.
String rawReferrer = intent.getStringExtra("referrer");
if (null != rawReferrer)
{
// The string is usually URL Encoded, so we need to decode it.
String referrer = URLDecoder.decode(rawReferrer, "UTF-8");
// Log the referrer string.
Logger.log(context,
"ReferrerReceiver.onReceive(Context, Intent)" +
"\nRaw referrer: " + rawReferrer +
"\nReferrer: " + referrer);
// Persist the referrer string.
context.getSharedPreferences("referrer", Context.MODE_PRIVATE).
edit().putString("referrer", referrer).commit();
// Let any listeners know about the change.
_observable.notifyObservers(referrer);
}
}
}
catch (Exception e)
{
Logger.log(context, e.toString());
}
}
//**************************************************************************
protected static class ObservableChanged extends Observable
{
//----------------------------------------------------------------------
@Override public boolean hasChanged()
{
return true;
}
}
}
но атрибут реферера передается в Play Store моему приложению после каждой повторной установки (удаление и установка на том же устройстве).
для быстрого тестирования установите это приложение из игрового магазина (не моего) по этой ссылке: https://play.google.com/store/apps/details?id=fr.simon.marquis.installreferrer&referrer=myReferrerValue
вы получите реферальное значение = "myReferrerValue" при каждом первом запуске повторной установки (удаление и установка на том же устройстве).
Мои вопросы:
Посылает ли магазин воспроизведения реферальную трансляцию, даже если приложение установлено на одном устройстве несколько раз?
Разве ссылки не должны транслироваться только один раз на устройство?
1 ответ
Да, магазин воспроизведения будет отправлять реферреру каждый раз, когда приложение установлено по ссылке, содержащей параметры.
Если вы заботитесь об уникальности, вам нужен некоторый бэкэнд, чтобы убедиться в этом самостоятельно. Вот как, например, настроить это делает. Реферер хранится в
Receiver
и отправлен в бэкэнд в какой-то момент в будущем.
Если вы думаете об этом, это имеет большой смысл: единственное, что делает приложение Play Store, - это получение параметров реферера из URL и его делегирование обратно в установленное приложение. Здесь в основном нет никакой логики.
Кроме того, разработчики в Google не знают, интересуетесь ли вы уникальностью или нет, поэтому они не будут препятствовать подсчету установок несколько раз, если вы захотите. (AFAIK панель статистики в Play Developer Console действительно отфильтровывает дубликаты, но они все еще доставляются в ваше приложение)