我正在构建应用以创建"活动",并且在您创建活动后,您可以通过(以及其他方式)邀请人发送带有邀请链接的电子邮件。
如果用户没有安装该应用,我希望有一种方法允许用户安装该应用,之后,自动"接受"邀请。
所以,我已经读过一种方法是使用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;。