我的应用程序使用 gcm。每次用户登录时,都会注册新的 gcm 令牌并将其发送到我的第 3 方服务器。每次用户注销时,都会注销 gcm 令牌。这炒锅没有任何问题。
问题是在测试时,测试人员可以在不注销的情况下卸载应用程序,然后重新安装并登录另一个帐户。然后他会从两个不同的帐户收到两个 gcms。这意味着他将收到他当前未登录的帐户的私人 gcms。有时,实时用户甚至会发生这种情况。
GCM 文档指出,如果卸载应用程序,gcm 令牌有时会过期。在实践中,这永远不会发生。
http://developer.android.com/google/gcm/gcm.html
GCM 文档还指出,您可以通过执行取消注册 GCM 令牌
Intent unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
unregIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
startService(unregIntent);
但是,如果您在重新安装后尝试此方法似乎不起作用。我确实收到了回调,它告诉我令牌未注册,但 gcm 令牌仍然可以正常工作。
我的问题是:您能否确保您的应用程序没有有效的 gcm 令牌?我真的很想在应用程序首次启动期间取消注册所有现有令牌,或者至少从手机设置中重置它们。