我正在关注官方指南中的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.
现在每次主活动启动时我都会调用intent服务,并且我相信instanceID负责启动令牌刷新。
每次从主要活动发起此GCM注册意图时,我都应该检查共享首选项值。但是,在这种情况下刷新将失败,因为在初始令牌获取之后,条件将始终为真。
我应该丢弃共享的prefs逻辑 - 这样每次都会向我的服务器发送一个新的令牌。这样做的正确方法是什么?令牌如何刷新worrk以及何时刷新?
答案 0 :(得分:5)
是的,您无需将其保存在sharedPreference中。为了保护客户端应用和应用服务器免受潜在的恶意重用注册令牌,您应该定期从服务器启动令牌刷新。从服务器端启动GCM注册令牌刷新时,客户端应用程序必须使用GCM注册客户端/服务器握手处理tokenRefreshed消息。
根据document,备份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