我的应用程序使用 gcm。每次用户登录时,都会注册新的 gcm token 并将其发送到我的第 3 方服务器。每次用户注销时,都会取消注册 gcm token 。这锅没有任何问题。
问题是,当涉及到测试时,测试人员可以在不注销的情况下卸载应用程序,然后重新安装并登录到另一个帐户。然后他将从两个不同的帐户收到两个 gcm。这意味着他将收到他当前未登录的帐户的私有(private) gcms。有时,实时用户甚至会发生这种情况。
GCM 文档指出,如果应用程序被卸载,gcm token 有时可能会过期。实际上,这永远不会发生。
http://developer.android.com/google/gcm/gcm.html
GCM 文档还声明您可以通过执行取消注册 GCM token
Intent unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
unregIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
startService(unregIntent);
但是你重装后试试这个方法好像不行。我确实收到了回调,它告诉我 token 未注册,但 gcm token 仍然可以正常工作。
我的问题是:您能否确保您的应用程序没有有效的 gcm token ?我真的很想在应用程序首次启动时注销所有现有 token ,或者至少从手机设置中重置它们。
最佳答案
您的应用程序的 GCM token 对于每台设备都是唯一的,因此如果您遇到不同的用户告诉您他们使用与其他用户相同的 GCM token ,那么您就知道您描述的情况已经发生。基本上,每次您收到 GCM token 时,您应该删除所有具有相同 GCM token 的旧记录,然后再将其仅分配给新用户。
关于android - 使所有 gcm token 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13724526/