You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

服务器重启后,移动端无法通过Firebase Cloud Messaging接收通知

解决FCM服务器重启后已注册设备收不到通知的问题

这种情况我之前排查过好几次,大概率是FCM的**设备注册令牌(Registration Token)**或者服务器端的订阅/配置状态在重启后出了问题,咱们一步步拆解原因和解决办法:

1. 服务器是否丢失了存储的设备令牌?

很多时候服务器会把设备令牌临时存在内存中(比如用变量缓存),一旦重启就会全部丢失——这时候哪怕推送流程没变,服务器手里根本没有有效的目标令牌,自然推不出去。

  • 解决办法:把所有设备令牌持久化存储到数据库(比如MySQL、Firestore)里,服务器启动时从数据库加载令牌列表,而不是依赖内存缓存。
  • 验证方式:检查服务器推送日志,看推送请求里携带的令牌是不是和客户端当前的令牌一致;如果日志里没有令牌,那肯定是存储环节出了问题。

2. 设备令牌是否已失效?

FCM令牌不是永久有效的,哪怕客户端没动,令牌也可能因为设备系统更新、应用签名变更、FCM服务器侧的令牌轮换而失效。服务器重启后如果还在使用旧的失效令牌,推送就会失败。

  • 解决办法:
    • 每次推送后检查FCM的响应,若收到NotRegistered或InvalidRegistration错误码,立即从数据库中标记/删除该令牌。
    • 在客户端实现令牌刷新监听(比如Android的onNewToken方法、iOS的didRegisterForRemoteNotificationsWithDeviceToken),一旦令牌更新就主动发送给服务器替换旧令牌。

3. 服务器端FCM配置是否加载异常?

服务器重启后,FCM的认证信息(比如服务账号密钥JSON、API密钥)可能没正确加载,导致服务器没有权限向FCM发送推送请求。

  • 解决办法:
    • 检查服务器启动日志,看初始化FCM客户端时有没有认证失败的报错(比如“Invalid credentials”)。
    • 确保FCM配置文件(如服务账号JSON)的路径正确,或者环境变量里的API密钥设置无误,重启时能被正常读取。

4. 快速排查步骤

如果还是找不到问题,可以按这个流程快速定位:

  • 手动用客户端当前的有效令牌调用FCM的推送API(比如用Postman发送请求),看能不能收到通知——能收到的话,问题出在服务器的推送逻辑或令牌存储上;收不到的话,检查令牌是否真的有效。
  • 对比服务器存储的令牌和客户端当前的令牌,确认两者完全一致(注意令牌是大小写敏感的)。
  • 查看FCM控制台的推送报告,看有没有失败的推送记录,以及对应的失败原因。

内容的提问来源于stack exchange,提问作者Roni Koren Kurtberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:50:21