iOS应用无法接收Firebase Cloud Functions触发的FCM推送通知怎么办
FCM iOS推送无法接收排查指南
一、云函数端排查
- 首先查看云函数日志中
sendToDevice返回的response对象内容:重点看success/failure计数,以及results数组中的错误码- 若错误为
MismatchSenderId:说明APNs证书/密钥和Firebase项目不匹配 - 若错误为
InvalidRegistration:说明存储的FCM token无效,需检查token上传逻辑
- 若错误为
- 补充iOS专属推送配置,你当前的message结构缺少APNs必要字段,修改参考如下:
const message = { notification: { title: "Party!", body: "The party is " + eventName, }, // 新增iOS专属配置 apns: { payload: { aps: { sound: "default" } }, headers: { "apns-priority": "10" } } }
- 建议弃用旧版
sendToDevice方法,改用新版send方法,兼容性更强:
const message = { token: theFCM, notification: { /* 同上配置 */ }, apns: { /* 同上配置 */ } } await admin.messaging().send(message);
二、iOS端排查
- 必须使用真机测试,iOS模拟器不支持远程推送功能
- 检查App通知权限:进入系统设置→对应App→通知,确认允许通知开关已打开,且提醒样式、声音等权限正常开启
- 校验FCM token一致性:对比Xcode控制台打印的token,和Firestore中
fcmTokens集合存储的token是否完全一致,确认是否存在用户ID匹配错误、token未正常上传的问题 - 检查Xcode项目配置:
- 进入Signing & Capabilities标签,确认已添加
Push Notifications能力 - 确认已添加
Background Modes能力,并勾选Remote notifications选项
- 进入Signing & Capabilities标签,确认已添加
- 若你在Info.plist中关闭了
FirebaseAppDelegateProxyEnabled(禁用方法混写),需手动实现以下方法,将APNs device token传给FCM:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken }
- 确认运行环境匹配:Xcode直接运行的是开发环境,需上传开发环境的APNs证书/密钥;TestFlight、App Store、AdHoc包为生产环境,需上传生产环境的APNs证书/密钥,二者不可混用
三、通用配置排查
- 进入Firebase控制台→项目设置→Cloud Messaging标签,确认已正确上传APNs认证密钥(推荐)或APNs推送证书,证书未过期、配置的Team ID/Bundle ID与项目一致
- 确认项目中使用的
GoogleService-Info.plist是从对应Firebase项目下载,其中的BUNDLE_ID字段与App的Bundle ID完全一致
内容的提问来源于stack exchange,提问作者theBod
相关产品推荐
相关产品推荐

