我正在构建一个应用程序来创建“事件”,在您创建事件后,您可以通过(以及其他方式)发送带有邀请链接的电子邮件来邀请人们。
如果用户没有安装应用程序,我想要一种方法来允许用户安装应用程序,然后自动“接受”邀请。
所以,我读过一种方法是使用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保存在共享首选项中,然后在第一次打开应用时,检查共享首选项中是否存储了一些值,如果有,“接受邀请”。