InstanceID,如果我没有成功将令牌发送到我的服务器怎么办?

InstanceID, what if I do not succeed on sending the token to my server?

我使用 Google 云消息传递 (GCM) 创建了推送通知服务器 (PNS)。 使用此架构,我的服务器必须知道与用户关联的令牌才能向他发送推送通知。

我扩展了 class InstanceIDListenerService ,它在刷新令牌时得到正确通知(我用 adb 测试过)。当它的方法 onTokenRefresh() 被调用时,我获取了新令牌,到目前为止,一切正常。

我的问题如下:如果我无法将这个新令牌发送到我的服务器怎么办? (网络错误、缺少连接、设备突然关闭或其他原因...)。 我是否必须存储服务器不知道我的新令牌的某个地方(首选项?)并在可能时重试?有没有办法让OS执行这个操作?

您的应用程序(当它 运行s 时)应始终检查令牌是否已发送到服务器。当调用 onTokenRefresh 时,您应该生成一个新令牌并将其发送到服务器。如果向服务器发送令牌失败,那么下次您的应用 运行 应该重试。

你是正确的,如果你在 TokenRefresh 上未能将令牌发送到服务器,你的应用将不会收到通知,直到它再次 运行 并成功将令牌发送到服务器。

另请注意,令牌刷新不应经常发生。它应该只发生在例如当应用程序被卸载并重新安装或令牌被认为不再安全时。

您可以使用 GCM NetworkManager 来排队、安排、检查网络连接和...,它非常可靠和有用,它可以处理您想要的所有任务。

此外,您还必须将您的令牌保存在您设备的某个位置,可能在您的共享首选项中,直到您确保您的服务器接收到它。请注意,如果您想使用 GCM 的其他功能,例如 topic messaging,您必须为所有主题注册保存和使用令牌。