由于 GCM 不断更新,我搜索过的大部分资源似乎都已过时或不清楚。基本上,我对令牌和 ID 何时到期感到困惑。(作为参考,我正在使用 Android。)
据我了解(如果我错了,请纠正我),我的服务器有一个 API 密钥和一个发件人 ID。使用发件人 ID,我可以让我的客户通过本地存储在我的客户端上的 InstanceID 请求令牌。我已经有点困惑了。InstanceID 是在我的应用上线时分配的?它会改变吗?当应用程序升级或卸载并重新安装(或设备恢复)时怎么办?通过调用 InstanceID.getInstance,我将始终检索相同的 InstanceID,还是它最终会过期并给我一个新的?通过调用 getID() 存储您检索的字符串是否有任何价值?文档似乎表明您在调用 getID() 时实际上检索了一个新的 InstanceID,因此这使事情变得更加复杂。(供参考,我指的是:https://developers.google。)
使用 InstanceID,我的客户端可以从 GCM 服务器请求令牌,然后将其发送到我的应用服务器。我的应用服务器存储了这个 Token,并可以使用它向 GCM 服务器发送消息,然后 GCM 服务器将消息发送到设备。我相信,设备使用存储的 InstanceID 来实际接收这些消息。那么拥有一个扩展 GcmListenerService 的类将允许我使用 onMessageReceived 接收这些消息吗?我不需要做任何特别的事情(除了在 AndroidManifest 中定义它)?我不必实际告诉它使用 InstanceID?它只是神奇地知道吗?
这些 ID 和令牌什么时候到期?它们会过期吗?我将令牌作为字符串存储在服务器上,但如果其中任何一个过期,我怎么知道它们已经过期?我总是可以生成一个新的 InstanceID 和 Token,这看起来很容易,但是旧的是否保持活动状态?如何从服务器上擦除旧令牌?似乎有一种简单的方法可以在 iOS 端使用 APNS 执行此操作,您可以在其中检索所有过期令牌的列表,然后将它们从数据库中擦除。