“com.android.vending.INSTALL_REFERRER”在广播上获取引荐来源参数在某些设备上有最多15秒的延迟

时间:2018-02-16 19:05:19

标签: android google-play install-referrer

我的服务器会创建一个链接,重定向并将参数传递给Google Play商店;

我的服务器收到的短信; https://goo.gl/ {UNIQUE_ID}

当我点击时,我实际上点击了下面的这个网址; http://www.mycompany.com/env=dev&token=123&id=456

上面的链接指示我google play store到我的应用程序包含的参数; https://play.google.com/store/apps/details?id=com.mycompany.app&referrer=123,456

这是问题;(第一次安装) 当我安装使用上面的链接打开的应用程序时,我想在第一次将这些“令牌”,“id”参数传递给我的应用程序,然后我将跳过登录。这些参数由服务器创建,因为它们对用户也是唯一的。

我已经设置了“com.android.vending.INSTALL_REFERRER”,我可以按预期接收参数但在每台设备上都不一致,并且可能会遇到很大的延迟。

 <receiver
        android:name=".GooglePlayReceiver"
        android:exported="true"
        android:permission="android.permission.INSTALL_PACKAGES">
        <intent-filter>
            <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
    </receiver>

我的GooglePlayReceiver Broadcastreceiver是;

public class GooglePlayReceiver extends BroadcastReceiver {

Context mContext;
String purchaseId = null;

public GooglePlayReceiver() {
}

@Override
public void onReceive(Context context, Intent intent) {
    try {
        mContext = context;
        Bundle extras = intent.getExtras();
        String verificationCode = null;
        String phoneNumber = null;
        if (extras != null) {
            String code = extras.getString("referrer");
            String[] strArr = code != null ? code.split(",") : new String[0];
            token = strArr[0];
            id = strArr[1];
        }
    } catch (Exception ex) {
    }
}}

此流程在某些设备上有很大的延迟。例如,谷歌Pixel 2立即获取参数,三星Galaxy S7延迟5-10秒。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

因为INSTALL_REFERRER是作为广播(documentation)发送的,所以它使用发布订阅模型。时间无法保证。

因此,您不应将应用启动流设计为依赖于在一定时间内接收广播。 Android是开源的,而且我的不同手机制造商所做的更改将导致广播的传送速度不同。

我的应用程序有不同的设计:

  • 将用户始终带到正常的设置流程
  • 如果广播稍后到达,则允许用户跳过登录