Android 安装推荐跟踪唯一性
Android Install referral tracking uniqueness
我在我的应用程序中实现了安装引荐跟踪:
https://developers.google.com/analytics/devguides/collection/android/v4/campaigns#google-play-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 商店会将 referrer 属性广播到我的应用程序。
为了快速测试,请从 link 的 Play 商店(不是我的)安装此应用程序:
https://play.google.com/store/apps/details?id=fr.simon.marquis.installreferrer&referrer=myReferrerValue
您将在每次首次启动重复安装(在同一设备上卸载和安装)时获得推荐值 = "myReferrerValue"。
我的问题是:
即使在同一台设备上重复安装应用程序,Play 商店也会发送推荐广播吗?
引荐来源不应该只在每台设备上广播一次吗?
是的,每次使用包含参数的 link 安装应用程序时,Play 商店都会发送引荐来源网址。
如果你关心唯一性,你需要一些后端来验证你自己。 adjust 就是这样做的。引荐来源网址存储在 Receiver
中,并在将来的某个时间发送到后端。
如果您仔细想想,这很有意义:Play 商店应用所做的唯一一件事就是从 url 获取引荐来源参数并将其委托回已安装的应用。这里基本不涉及逻辑。
此外,google 的开发人员不知道您是否对唯一性感兴趣,因此如果您愿意,他们不会阻止您多次计算安装次数。 (据我所知,Play Developer Console 中的统计面板 确实 过滤掉重复项,但它们仍会传送到您的应用程序)
我在我的应用程序中实现了安装引荐跟踪: https://developers.google.com/analytics/devguides/collection/android/v4/campaigns#google-play-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 商店会将 referrer 属性广播到我的应用程序。
为了快速测试,请从 link 的 Play 商店(不是我的)安装此应用程序: https://play.google.com/store/apps/details?id=fr.simon.marquis.installreferrer&referrer=myReferrerValue
您将在每次首次启动重复安装(在同一设备上卸载和安装)时获得推荐值 = "myReferrerValue"。
我的问题是:
即使在同一台设备上重复安装应用程序,Play 商店也会发送推荐广播吗?
引荐来源不应该只在每台设备上广播一次吗?
是的,每次使用包含参数的 link 安装应用程序时,Play 商店都会发送引荐来源网址。
如果你关心唯一性,你需要一些后端来验证你自己。 adjust 就是这样做的。引荐来源网址存储在
Receiver
中,并在将来的某个时间发送到后端。
如果您仔细想想,这很有意义:Play 商店应用所做的唯一一件事就是从 url 获取引荐来源参数并将其委托回已安装的应用。这里基本不涉及逻辑。
此外,google 的开发人员不知道您是否对唯一性感兴趣,因此如果您愿意,他们不会阻止您多次计算安装次数。 (据我所知,Play Developer Console 中的统计面板 确实 过滤掉重复项,但它们仍会传送到您的应用程序)