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