Angular+Ionic安卓App遇FCM注册令牌无效问题求助
FCM推送通知异常排查方案
基于Angular + Ionic的安卓App,此前Firebase推送通知运行正常,近期修改DB服务(与通知功能无关)后出现部分通知发送失败:
- 部分场景下,通知未注册到触发云函数的Realtime DB
- 部分场景下,令牌已写入DB并触发云函数,但云函数报错:
Error: The registration token is not a valid FCM registration token
已确认注册时获取的令牌与云函数日志中令牌完全一致,且通知在注册完成数秒后推送,以下是具体排查方向:
核心排查点
- 令牌有效性校验
- 核对项目一致性:确认云函数使用的Firebase项目配置,与App端
google-services.json是否匹配,避免跨项目使用令牌 - 直接验证令牌:调用FCM的验证接口(
POST https://fcm.googleapis.com/fcm/send,请求体添加"validate_only": true),传入令牌确认是否真的无效,排除日志显示误差
- 核对项目一致性:确认云函数使用的Firebase项目配置,与App端
- Realtime DB注册逻辑
- 检查写入时机:确认
onFCMTokenChanged的订阅者是否在令牌完全写入DB后才触发通知逻辑,避免异步写入未完成就触发云函数 - 排查写入失败:查看App端DB写入日志,确认是否存在权限不足、网络波动导致的写入失败;检查
tokenProcessed标记逻辑,是否存在多事件触发时漏处理或重复处理的情况
- 检查写入时机:确认
- 云函数执行逻辑
- 令牌完整性检查:在云函数中添加日志,输出令牌的长度、原始字符串(避免日志格式化时的截断/转义问题)
- 依赖版本检查:更新
firebase-admin到最新稳定版,排除依赖版本不兼容导致的令牌校验异常
- App端FCM初始化
- 启动流程影响:检查DB服务修改是否改变了App启动顺序、依赖注入逻辑,导致FCM初始化延迟或失败;查看启动日志,确认
PushNotifications.addListener是否在正确时机注册 - 网络环境测试:切换设备网络(如从WiFi切到4G),排除企业代理、网络限制导致令牌无法同步到Firebase服务器的问题
- 启动流程影响:检查DB服务修改是否改变了App启动顺序、依赖注入逻辑,导致FCM初始化延迟或失败;查看启动日志,确认
相关代码与日志
注册代码
PushNotifications.addListener("registration", (token: Token) => { if (token && !this.tokenProcessed) { this.tokenProcessed = true; console.log('My token: ' + JSON.stringify(token)); this.onFCMTokenChanged.next(token.value); } });
控制台日志
My token: {"value":"D8636BCC62A673B4D574736AFCA1F73AF7C34EBBB7D99A38E05CDB6963FEAE8B"}
GCS日志内容
云函数触发通知请求时,日志显示目标令牌为D8636BCC62A673B4D574736AFCA1F73AF7C34EBBB7D99A38E05CDB6963FEAE8B,随后抛出The registration token is not a valid FCM registration token错误。
内容的提问来源于stack exchange,提问作者Mor Sagmon
相关产品推荐
相关产品推荐

