PWA接入FCM推送时如何保存Firebase Cloud Messaging令牌?
FCM推送令牌存储与管理方案
你获取到的FCM注册令牌没有官方的全自动托管系统,需要你自行实现存储和生命周期管理,具体方案如下:
存储选择:可以存入Firebase数据库
如果你的项目已经在使用Firebase生态,直接将令牌存入Firestore或实时数据库是完全可行的,只需要注意两个核心要求:
- 存储时必须关联可识别的身份标识:如果是已登录用户关联用户UID,未登录用户关联设备唯一标识,避免孤立存储令牌导致无法定向推送
- 必须为令牌存储的集合配置严格的读写权限,禁止公开访问,避免令牌泄露被滥用
没有内置自动化管理系统,你需要自行实现四个核心逻辑
FCM官方没有提供自动完成订阅、取消订阅、令牌清理的托管服务,这部分逻辑需要你自己开发:
- 订阅成功写入逻辑:用户同意通知授权后,前端调用
getToken()拿到令牌,调用后端接口或直接通过Firebase客户端SDK写入数据库,完成令牌和用户身份的绑定 - 令牌刷新更新逻辑:FCM令牌并非永久有效,会在用户清理浏览器数据、FCM主动轮换等场景下变更,你需要监听
onTokenRefresh事件,拿到新令牌后主动更新数据库中的对应记录,避免用过期令牌推送失败 - 取消订阅删除逻辑:用户主动关闭通知权限时,调用
deleteToken()销毁当前令牌,同时删除数据库中对应的记录 - 无效令牌清理逻辑:每次调用FCM接口发推送时,FCM会返回
InvalidRegistration、NotRegistered等错误码标记无效令牌,你需要定期批量清理数据库中这些无效令牌,避免占用推送配额
如果你只需要做全量无差别推送,可以使用FCM的主题订阅能力,前端调用subscribeToTopic()方法订阅对应主题,FCM会帮你维护主题下的令牌列表,你不需要自行存储全量令牌即可实现广播推送,但这种方式不支持用户维度的定向推送,且你还是需要自行处理令牌失效后的清理逻辑。
内容的提问来源于stack exchange,提问作者Adel Benyahia
相关产品推荐
相关产品推荐

