GCM令牌刷新及何时将令牌发送到服务器

4

我正在按照官方指南中的 GCM-Android 集成示例进行操作。

尤其是上述链接类中的以下代码,让我感到困惑:

// You should store a boolean that indicates whether the generated token has been
// sent to your server. If the boolean is false, send the token to your server,
// otherwise your server should have already received the token.

现在,每次我的主活动启动时,我都会调用意图服务,并且我认为instanceID负责启动令牌刷新。
我是否应该每次从我的主活动启动此GCM注册意图时检查Shared Prefs值。但是,在这种情况下,刷新将失败,因为在初始令牌获取后,条件将始终为真。
我是否应该放弃共享偏好逻辑-这样每次都会向我的服务器发送新的令牌。这样做的正确方法是什么?令牌刷新是如何工作的?什么时候进行刷新?
1个回答

5
是的,您不需要将其保存在sharedPreference中。为了保护客户端应用程序和应用程序服务器免受可能存在的恶意重复使用注册令牌的影响,您应该定期从服务器启动令牌刷新。当从服务器端启动GCM注册令牌刷新时,客户端应用程序必须处理带有GCM注册客户端/服务器握手的tokenRefreshed消息。
根据文档,备份Google Cloud Messaging注册返回的注册令牌可能会导致恢复的应用程序通知出现意外行为。这是因为当用户在新设备上安装您的应用程序时,应用程序必须查询GCM API以获取新的注册令牌。如果旧的注册仍然存在,因为系统已经备份并还原了它,那么应用程序就不会寻求新的令牌。为了防止出现此问题,应将注册令牌排除在备份文件集之外。
这是一个与Google服务相关的演示应用程序 - MyInstanceIDListenerService:https://github.com/googlesamples/google-services/blob/master/android/gcm/app/src/main/java/gcm/play/android/samples/com/gcmquickstart/MyInstanceIDListenerService.java#L38 要了解更多信息,请阅读此处的官方Google文档:https://developers.google.com/cloud-messaging/registration

你应该定期启动令牌刷新 - 定期是多久一次呢?也许一天一次? - Daniel Wilson
我已经研究了一段时间,我认为你不需要手动定期刷新,实际上,InstanceIDListenerServiceonRefreshToken()回调是你需要关注的唯一函数 - 在这个回调中,你可以请求一个新的令牌并更新你的服务器。但重要的是,这个回调是由系统自动触发的(我想)。 - Daniel Wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接