【问题标题】:Proper use of token in Firebase cloud messaging [duplicate]在 Firebase 云消息传递中正确使用令牌 [重复]
【发布时间】:2026-01-18 00:05:01
【问题描述】:

我有客户端-服务器应用程序,我开发 Xamarin 移动客户端,我使用 FCM 进行推送通知,当我登录时,我将我的令牌发送到服务器,在那里我将它绑定到我的数据库中的帐户,但是怎么办当我在移动应用程序中注销时,服务器可能不知道这一点并将继续发送通知,我必须更新客户端中的令牌,但这没有实现,也不正确,我该怎么办?

这里描述了一个类似的问题。 Firebase Cloud Messaging Refresh Token

【问题讨论】:

  • 我不明白这里的问题。如果设备令牌与用户相关联,那么在用户显式注销时远程远程令牌是有意义的,由管理用户与其注册设备之间关系的某些后端组件驱动。
  • 您应该从数据库中删除令牌。未登录用户收到推送消息时缺乏安全性。
  • 我可以这样做,我认为可能服务器不会知道并会继续发送通知
  • 当用户注销时,必须从客户端或服务器删除令牌(通过在发送消息时检查响应) -- 参见this post

标签: android firebase firebase-cloud-messaging


【解决方案1】:

Android FCM Token Not Changed When You Logout 因此从 DB 中删除令牌不是一个好主意,因此简单的解决方案是您可以在服务器 DB 中添加一列并在那里保持状态。

例如创建一个列 "is_active",当用户登录到您的应用程序时,将其值设为“1”,在注销时将其设为“0”,因此最后当您必须发送推送通知时通过“is_active”过滤它们意味着选择那些is_active = 1的行

【讨论】:

  • 好的,谢谢,但我不太明白如何过滤这些通知,我必须在客户端保持活动状态,如何过滤,如果我以身份登录会发生什么不同的用户。如果对你来说不难,我可以得到一些代码示例。
  • 无法在服务端保存激活状态,服务端可能不知道客户端没有激活
  • 如果您不想在服务器上进行更改,那么在 android 端保留一个布尔值 isLogin,如果它为 true,则只显示通知
  • 我可以拦截通知并取消其显示?