已更新Token仍部分用户出现FCM 404 'UNREGISTERED'错误排查
FCM推送报UNREGISTERED(404)错误的根因分析
以下是针对你遇到的部分用户推送失败问题的具体根因分析:
Token已被FCM主动标记无效,但本地未触发更新
即便你实现了Token不一致时的更新逻辑,以下场景会导致FCM将Token标记为无效,而本地未同步新Token:- 用户卸载重装应用后未打开:旧Token会被FCM注销,但新Token需用户打开应用才会生成并同步到数据库,此时数据库中仍存旧的无效Token
- 用户清除应用数据:本地Token丢失,若用户未重新启动应用,数据库无法获取新Token
- FCM服务端主动注销Token:比如同一设备的应用实例被替换、或因安全策略注销Token,此时应用未触发Token刷新逻辑,数据库仍保留旧Token
Token更新逻辑存在遗漏场景
你的更新逻辑仅覆盖「数据库Token与应用实例Token不一致」的情况,但可能漏掉这些场景:- 未正确监听
onNewToken回调:应用在后台收到FCM的Token刷新通知时,若未处理该回调,新Token无法同步到数据库 - Token获取存在延迟:部分设备上,
FirebaseMessaging.getInstance().getToken()启动时返回旧Token,后续获取到新Token后未执行同步操作 - 多设备登录未清理旧Token:用户在新设备登录生成新Token后,数据库仅更新为最新Token,但旧设备的无效Token未被移除,推送时仍会被调用
- 未正确监听
数据库存在冗余无效Token未清理
你的逻辑仅做Token更新,未处理无效Token的清理:- 用户更换设备后,旧设备的Token仍留存于数据库,这些Token已被FCM标记为无效
- Token过期或被FCM回收后,系统无对应清理机制,导致无效Token持续存在并被用于推送
validate_only验证结果的指向性
使用"validate_only": true验证仍报错,说明这些Token确实已被FCM标记为UNREGISTERED,问题核心在于你的Token生命周期管理存在漏洞,而非验证机制问题
内容的提问来源于stack exchange,提问作者BEdev
相关产品推荐
相关产品推荐

