在手动启动应用程序之前,com.android.vending.INSTALL_REFERRER不会被触发

时间:2017-02-26 06:06:00

标签: android google-play broadcastreceiver install-referrer

我正在构建应用以创建"活动",并且在您创建活动后,您可以通过(以及其他方式)邀请人发送带有邀请链接的电子邮件。

如果用户没有安装该应用,我希望有一种方法允许用户安装该应用,之后,自动"接受"邀请。

所以,我已经读过一种方法是使用com.android.vending.INSTALL_REFERRER接收器,当用户使用如下链接安装应用程序时:https://play.google.com/store/apps/details?id=com.melorriaga.events&referrer=eventId=1234,广播接收器将被执行我将能够阅读"推荐人"并且行动得当。

我在清单中添加了这个:

<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保存在共享首选项中,然后,当第一次打开应用程序时,检查共享首选项中是否存储了某些值,如果是,&#34 ;接受邀请&#34;。

0 个答案:

没有答案