FCM 主题缓存在旧令牌上 - 用户仍然收到推送

Posted

技术标签:

【中文标题】FCM 主题缓存在旧令牌上 - 用户仍然收到推送【英文标题】:FCM topic cached on old token - users still getting pushes 【发布时间】:2018-02-23 10:56:25 【问题描述】:

遇到一个棘手的问题。我有firebase消息,在数据库中记录令牌(按规定)。然后我正在运行触发器以发送到主题(使用函数)。我在取消订阅某个主题时发现了一个错误(名称中有一个空格 - 自已修复),因此用户无法正确取消订阅。自从他们得到那个话题。只是想知道是否有一种方法可以删除旧令牌/过期 - 然后退订所有主题。基本上,我希望创建一个“重置”按钮,以防这种情况再次发生。

我的个人资料也有同样的问题。然而,我的治疗(和测试)是删除并重新创建我的个人资料。不是一个理想的解决方案!之后一切都恢复正常了。

【问题讨论】:

如果主题有空间,那么用户如何订阅它? 我在订阅时解决了这个问题,但不知何故忘了申请退订。深夜编码:) 我知道 - 我在订阅时删除了主题中的所有空格(并添加了一些代码以防止空格)。它现在正在成功订阅该主题。 【参考方案1】:

基本上,我希望创建一个“重置”按钮,以防这种情况再次发生。

目前你不能这样做,主题是基于发布/订阅模型的。因此,订阅某个主题的用户必须使用自己的手机取消订阅才能停止接收与该主题相关的通知。

如果您不小心创建了一个主题并且所有用户都取消了订阅,那么它就不再是一个主题,并且没有人能够订阅它或收到任何与之相关的通知。

【讨论】:

好的,所以我也许应该让手机自己管理订阅而不是在数据库中?哦,那么如果我有一个名为“AllAreas”的标签 - 我订阅然后取消订阅,唯一的另一个人取消订阅。它删除了主题??那将解释一些奇怪的行为。因为一个人有那个标签并且没有得到所有的推送(因为它被设置为)。 是的,无论如何手机都会管理订阅。当用户订阅一个主题时,手机也订阅了该主题,因此当他取消订阅该手机时,他将不会收到来自该主题的通知。如果需要,您可以将每个用户的主题存储在数据库中。 好的。是的,目前我正在存储每个用户的主题和电话令牌。然后当他们添加主题或删除主题时,我将最后一个提交到数据库的令牌并相应地订阅/取消订阅。它为 99% 的人工作,除了一个人。使用令牌,旧令牌是否会在您获得新令牌后立即过期?或者方法调配是否也保留并将消息映射到旧令牌?我担心的是我抓住了错误的令牌和主题的消息 - 例如“AllAreas”没有到达正确的目标。 查看***.com/questions/48588962/…

以上是关于FCM 主题缓存在旧令牌上 - 用户仍然收到推送的主要内容,如果未能解决你的问题,请参考以下文章

客户端未收到主题服务器端的 FCM 通知

如何不向不想接收推送的用户发送FCM?

Flutter 按主题使用 FCM 推送通知

fcm 订阅主题

如何使用 FCM 向我的数据库中的用户发送推送通知?安卓

Firebase 推送通知 - 如何跟踪用户 FCM 令牌?