android - FCM 是否会显示以前使用的令牌不再可用?什么时候?
问题描述
想象一下用户安装并打开我的应用程序。生成 FCM 注册令牌并将其发送到我的服务器。稍后,假设用户清除了我的应用程序的数据。然后当他打开应用程序时,将生成一个新的 Token。所以,由于我还没有办法知道这一点,所以我也照常向旧注册发送通知。现在 :
FCM 是否会假定设备处于离线状态并继续尝试发送通知,直到其生命周期结束(默认 4 周)?
如果没有,它返回registration-token-not-registered错误需要多长时间?
解决方案
不会。FCM 服务器会立即知道令牌已过期。
从 #1 开始,它会立即将其发回。
这里可能会让人感到困惑的是您实际收到NotRegistered
错误的步骤。以下是两种可能的情况:
- 设备安装了应用程序。生成令牌并将其发送到您的服务器。
- 您向令牌发送推送通知。
- FCM 服务器检查,令牌仍然有效,尽快将要发送的消息排入队列。
下一个来自您的场景:
设备安装了应用程序。生成令牌并将其发送到您的服务器。
用户下线并清除应用数据。以前的令牌现在无效,但由于设备处于离线状态,因此尚未通知 InstanceID 服务。
您向令牌发送推送通知。FCM 认为该令牌是有效的,向您发送成功响应并尽快将要发送的消息排入队列。
在这里,令牌当前仍然有效。因此,您会像往常一样收到成功响应。
设备上线。InstanceID 服务同步,让它知道旧令牌现在无效并请求新令牌。生成新的令牌。
-
- 5 几乎在设备上线的同时,FCM 检查令牌是否仍然有效。如果不是,那么它将丢弃排队的消息。
-
要永远记住的是,FCM 是作为中间人工作的。希望这可以解决问题。干杯!
推荐阅读
- c - [elf] 列出每个 c 文件的函数
- python - Python Camelot-py解析中缺少值
- regex - 字符类中的正则表达式重复范围
- html - Visual Studio Code:在 CSS 中选择类后在浏览器中突出显示对象边框
- mysql - 成功完成 MySQL 触发器后如何返回消息
- c++ - CMake 找不到文件或目录
- javascript - React Native 在生产模式下仅显示启动画面
- c# - 基于需要在执行时间内接收更多项目的列表执行 Parallel.ForEach
- javascript - 第二次通过后阵列未重置
- typescript - Jest mockImplementation 不是一个函数,但可以与 require 一起使用