我的应用程序使用gcm。每次用户登录时,都会注册新的gcm token 并将其发送到我的第三方服务器。每次用户注销时,gcm token 都会被注销。炒锅没有任何问题。
问题在于,在进行测试时,测试人员可以在不注销应用程序的情况下卸载该应用程序,然后再次将其安装回并登录到另一个帐户。然后,他将从两个不同的帐户中收到两个gcms。这意味着他将收到尚未登录的私有(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 ,或者至少从电话设置中重置它们。
最佳答案
我相信当您的服务器向无效的注册ID发送消息时,您会收到错误消息。我认为您可以捕获此错误以从数据库/数据存储中删除这些注册ID。
同样来自文档(canonical id):