android – 使所有gcm标记无效

前端之家收集整理的这篇文章主要介绍了android – 使所有gcm标记无效前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的应用程序使用gcm.每次用户登录时,都会注册新的gcm令牌并将其发送到我的第三方服务器.每次用户注销时,都会取消注册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,new Intent(),0));
startService(unregIntent);

但是,如果您在重新安装后尝试使用此方法似乎不起作用.我收到回调告诉我令牌未注册,但gcm令牌仍然正常.

我的问题是:你能确保你的申请没有有效的gcm代币吗?我真的想在应用程序首次启动时取消注册所有现有令牌,或者至少从手机设置中重置它们.

解决方法

我相信当您的服务器向无效的注册ID发送消息时,您将收到错误消息.我认为您可以捕获此错误以从数据库/数据存储中删除这些注册ID.

也来自doc(canonical id):

If later on you try to send a message using a different registration ID,GCM will process the request as usual,but it will include the canonical registration ID in the registration_id field of the response. Make sure to replace the registration ID stored in your server with this canonical ID,as eventually the ID you’re using will stop working.

猜你在找的Android相关文章