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