我很想知道应用程序代码应该如何处理与Firebase云消息(FCM(一起撤销通知权限令牌。该问题与这篇文章/答案部分相似,尽管他们的案例不包括 FCM。
所以我们有以下场景:
-
该应用程序不需要用户登录(因此我们存储在数据库中的令牌是匿名的,与任何
uid
无关( -
该应用程序提供了一组选择加入/选择退出按钮,用于授予和撤销通知权限。
-
该应用会收集数据库中的令牌,供
sendToDevice(tokens, notifcation)
稍后在 Firebase 函数中使用。
应用程序在令牌 颁发(
getToken
(或刷新(onTokenRefresh
(后,利用localStorage
保留令牌,以便稍后将其提供给deleteToken(token)
,并在UI中指示通知订阅的当前状态。现在,用户选择撤销曾经授予的权限 - 如果他们这样做干净(通过选择退出按钮(,则会调用
deleteToken(token)
方法并清除相应的本地存储项。所有内容都应同步,FCM 将不再发送给此用户。问题如果用户在全局浏览器范围内以更管理/批量的方式清除所有权限或本地存储,该怎么办。然后事情变得不同步。令牌从浏览器中消失,UI 将显示已选择退出,但令牌尚未从数据库中删除,因此它仍然有效,用户将继续收到通知。发送结果不会包含此用户的任何错误,因此我们将无法识别情况并删除令牌。
这里最常见的做法是什么?是否不鼓励匿名通知?我对通知和商品信息管理的理解中是否遗漏了任何内容?
令牌最终将变为无效。 您将能够分辨,因为向该令牌发送消息将产生错误代码"错误:未注册"。从链接的文档:
现有的注册令牌可能在许多 方案,包括:
- 如果客户端应用向 FCM 取消注册。
- 如果客户端应用自动取消注册,则当用户卸载应用程序时可能会发生这种情况。例如,在 iOS 上,如果 APNS 反馈服务将 APNS 令牌报告为无效。
- 如果注册令牌过期(例如,Google 可能决定刷新注册令牌,或者 APNS 令牌已过期( 对于 iOS 设备(。
- 如果客户端应用已更新,但新版本未配置为接收消息。
对于所有这些情况,请从应用中删除此注册令牌 服务器并停止使用它发送消息。
如果您使用管理员 SDK 或其他版本的 FCM 服务器 API 发送消息,情况也类似。
虽然您可能不会立即收到有关此内容的反馈,但您最终会收到此错误消息,这是将其从数据库中删除的线索。