使用Ionic Capacitor开发时iOS端FCM推送通知无法正常工作问题咨询
问题诱因
- 核心原因是生成FCM token时,iOS系统还未完成APNS设备令牌的注册和上报,导致拿到的FCM token未和APNS通道绑定,APNs无法转发Firebase的推送请求,所以通知无法触达设备。
- Capacitor 3.x版本下常见触发场景为代码过早调用
FCM.getToken(),调用时机早于iOS推送权限申请通过、APNS令牌返回的时间节点。 - Xcode项目推送配置缺失、Firebase控制台APNS配置错误也会触发该报错。
排查解决步骤
- 第一步:调整FCM token获取时机
禁止在应用初始化阶段直接调用FCM.getToken(),必须先完成推送权限申请、注册推送服务后,监听tokenRefresh事件获取有效token,该事件触发时代表APNS令牌已经成功上报到FCM,此时拿到的token可正常用于推送。
参考代码逻辑:import { FCM } from '@capacitor-community/fcm'; import { PushNotifications } from '@capacitor/push-notifications'; // 先申请推送权限 const permStatus = await PushNotifications.requestPermissions(); if (permStatus.receive === 'granted') { // 注册系统推送服务 await PushNotifications.register(); // 监听token刷新事件,此时获取的为绑定APNS的有效FCM token FCM.addListener('tokenRefresh', async (tokenRes) => { const validFcmToken = tokenRes.value; // 此处执行token上传到业务服务端等逻辑 }); } - 第二步:检查Xcode项目配置
打开iOS项目的Signing & Capabilities标签页,确认已完成两项配置:- 已添加
Push Notifications能力 - 已添加
Background Modes能力,且勾选了Remote notifications子选项
同时确认项目的Bundle ID与Firebase控制台配置的iOS应用Bundle ID完全一致。
- 已添加
- 第三步:检查Firebase配置
确认Firebase控制台的iOS项目设置中已上传正确的APNS .p8认证密钥(优先使用密钥,无需区分开发生产环境),或已上传对应环境的APNS推送证书;同时确认Xcode项目中导入的GoogleService-Info.plist文件是从对应Firebase项目下载的,未混用其他项目的配置文件。 - 第四步:验证修复效果
卸载设备上已安装的旧应用,清理Xcode缓存后重新编译运行,获取新的FCM token后进行推送测试。
内容的提问来源于stack exchange,提问作者Najam Us Saqib
相关产品推荐
相关产品推荐

