首页 > 解决方案 > FCM 是否会显示以前使用的令牌不再可用?什么时候?

问题描述

想象一下用户安装并打开我的应用程序。生成 FCM 注册令牌并将其发送到我的服务器。稍后,假设用户清除了我的应用程序的数据。然后当他打开应用程序时,将生成一个新的 Token。所以,由于我还没有办法知道这一点,所以我也照常向旧注册发送通知。现在 :

  1. FCM 是否会假定设备处于离线状态并继续尝试发送通知,直到其生命周期结束(默认 4 周)?

  2. 如果没有,它返回registration-token-not-registered错误需要多长时间?

标签: androidfirebasefirebase-cloud-messaging

解决方案


  1. 不会。FCM 服务器会立即知道令牌已过期。

  2. 从 #1 开始,它会立即将其发回。

这里可能会让人感到困惑的是您实际收到NotRegistered错误的步骤。以下是两种可能的情况:

  1. 设备安装了应用程序。生成令牌并将其发送到您的服务器。
  2. 您向令牌发送推送通知。
  3. FCM 服务器检查,令牌仍然有效,尽快将要发送的消息排入队列。

下一个来自您的场景:

  1. 设备安装了应用程序。生成令牌并将其发送到您的服务器。

  2. 用户下线并清除应用数据。以前的令牌现在无效,但由于设备处于离线状态,因此尚未通知 InstanceID 服务。

  3. 您向令牌发送推送通知。FCM 认为该令牌是有效的,向您发送成功响应并尽快将要发送的消息排入队列。

    在这里,令牌当前仍然有效。因此,您会像往常一样收到成功响应。

  4. 设备上线。InstanceID 服务同步,让它知道旧令牌现在无效并请求新令牌。生成新的令牌。

      1. 5 几乎在设备上线的同时,FCM 检查令牌是否仍然有效。如果不是,那么它将丢弃排队的消息。

要永远记住的是,FCM 是作为中间人工作的。希望这可以解决问题。干杯!


推荐阅读