1

我正在构建一个应用程序来创建“事件”,在您创建事件后,您可以通过(以及其他方式)发送带有邀请链接的电子邮件来邀请人们。

如果用户没有安装应用程序,我想要一种方法来允许用户安装应用程序,然后自动“接受”邀请。

所以,我读过一种方法是使用com.android.vending.INSTALL_REFERRER接收器,当用户使用如下链接安装应用程序时: https: //play.google.com/store/apps/details?id=com.melorriaga。 events&referrer=eventId=1234,广播接收器将被执行,我将能够读取“referrer”并正确操作。

我在清单中添加了这个:

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

和接收器:

public class InstallReceiver extends BroadcastReceiver {

    private static final String TAG = InstallReceiver.class.getSimpleName();

    public static final String EVENT_ID = "EVENT_ID";

    @Override
    public void onReceive(Context context, Intent intent) {
        String referrer = intent.getStringExtra("referrer");
        Log.i(TAG, "referrer: " + referrer);

        String eventId = getEventIdFromReferrer(referrer);
        Log.i(TAG, "eventId: " + eventId);

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
        sharedPreferences.edit()
                .putString(EVENT_ID, eventId)
                .apply();
        }
    }

}

为了测试它,我正在做:

am broadcast -a com.android.vending.INSTALL_REFERRER --es "referrer" "eventId=1234"

这在应用程序正在运行或应用程序至少打开一次时有效。但是,如果我安装应用程序adb install app.apk,然后am broadcast...(应用程序从未打开),onReceive则不会调用该方法。如果我打开应用程序然后am broadcast...,现在它可以工作了。

我发现了这个:https ://commonsware.com/blog/2011/07/13/boot-completed-regression-confirmed.html (来自https://stackoverflow.com/a/28322345/1742973),所以这个似乎是预期的行为。

所以,我错过了什么?com.android.vending.INSTALL_REFERRER如果在手动打开应用程序之前不会收到接收器,那有什么意义?

思路是:安装应用后将事件ID保存在共享首选项中,然后在第一次打开应用时,检查共享首选项中是否存储了一些值,如果有,“接受邀请”。

4

0 回答 0