iOS端FCM推送通知问题:无效注册令牌报错排查
解决FCM iOS端「无效注册令牌」问题的技术方案
问题回顾
Android端FCM推送功能正常,但iOS端发送推送时返回messaging/invalid-registration-token错误,已确认Firebase控制台的Key ID、Team ID及证书配置正确,当前使用的iOS FCM令牌为FAE728F3A519B6688733E9AEE3DFE3266CA2F88683C49BC5E85F24984DF2BF1C。
排查与解决步骤
验证令牌格式与有效性
你提供的令牌为64位全大写十六进制字符串,不符合FCM iOS令牌的标准特征:- 标准FCM iOS令牌长度约152字符,包含大小写字母、数字及
/、=等特殊字符 - 令牌不应被手动转成大写,需保持客户端获取的原始格式
该令牌大概率是APNs设备令牌而非FCM令牌,或被截断、篡改过,需从客户端重新获取正确的FCM令牌。
- 标准FCM iOS令牌长度约152字符,包含大小写字母、数字及
确认客户端令牌获取流程
确保iOS客户端正确调用Firebase Messaging的令牌获取接口:- 使用
messaging().token(completion:)(Swift)或对应Objective-C方法获取FCM令牌,而非直接使用APNs设备令牌 - 客户端需先完成Firebase初始化,并获取用户授权的推送通知权限(alert、sound、badge)
在客户端打印令牌日志,与服务端使用的令牌完全对比,确保无字符差异。
- 使用
环境一致性检查
- 确认iOS客户端的
GoogleService-Info.plist中PROJECT_ID与服务端使用的Firebase项目完全一致 - 若为开发环境测试,确保客户端获取的是开发环境令牌;生产环境则对应生产环境令牌,FCM会根据令牌自动适配环境,但错误环境的令牌会被判定无效。
- 确认iOS客户端的
处理令牌失效场景
当iOS设备重装APP、恢复出厂设置或APP卸载重装时,原FCM令牌会失效,需客户端监听令牌更新事件(messaging(tokenRefresh:)),并将新令牌同步到服务端。优化服务端发送代码
- 确保
sendToDevice的第一个参数为令牌数组(单个令牌可传[fcmToken]),避免格式错误 - 将payload中的
badge字段改为数字类型(原代码中是字符串"1"),修改后代码:const payload = { notification: { title: `John just joined`, body: `Your friend John is now on your app`, sound: 'default', badge: 1 // 改为数字类型 }, };
- 确保
内容的提问来源于stack exchange,提问作者Okiain
相关产品推荐
相关产品推荐

