React Native集成Firebase后iOS端推送通知失效问题咨询
问题核心说明
这个报错的本质是iOS端尚未获取到APNs设备令牌时,就提前调用了FCM令牌的获取接口,导致生成的FCM令牌无法绑定APNs通道,最终无法正常接收APNs推送。
排查解决步骤
第一步:校验Xcode基础配置
- 打开Xcode项目的
Signing & Capabilities面板,确认已添加Push Notifications能力 - 确认已添加Background Modes能力,且勾选了Remote notifications选项
- 确认当前应用的Bundle ID与Firebase控制台中注册的iOS应用Bundle ID完全一致,且Firebase控制台的iOS应用配置页已上传正确的APNs证书或APNs认证密钥
- 打开Xcode项目的
第二步:调整FCM令牌的获取时机
- 禁止在App初始化启动阶段直接调用
getToken()获取FCM令牌,需确保先完成推送权限申请、APNs注册完成后再触发FCM令牌获取 - 推荐代码逻辑参考:
import messaging from '@react-native-firebase/messaging'; // 先申请推送权限 const requestUserPermission = async () => { const authStatus = await messaging().requestPermission(); const enabled = authStatus === messaging.AuthorizationStatus.AUTHORIZED; if (enabled) { // 权限同意后再获取FCM令牌 const fcmToken = await messaging().getToken(); // 后续处理FCM令牌的上报等逻辑 } }- 同时监听
messaging().onTokenRefresh()事件,在令牌刷新时自动更新服务端存储的FCM令牌
- 禁止在App初始化启动阶段直接调用
第三步:校验iOS原生层配置
- 检查
ios/AppDelegate.m文件,确认已正确引入Firebase头文件,且在didFinishLaunchingWithOptions方法中调用了[FIRApp configure] - 如自定义过APNs相关代理方法,需确认已将获取到的APNs令牌传递给Firebase Messaging:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }- 检查
第四步:清理缓存重新构建
- 不要使用iOS模拟器测试推送功能,模拟器无法获取APNs令牌,必须使用真机测试
- 执行以下命令清理依赖缓存重新构建:
完成后重新运行项目测试即可。rm -rf ~/Library/Developer/Xcode/DerivedData cd ios && rm -rf Pods Podfile.lock && pod install
补充说明
如果调整后首次启动仍出现该警告,可在APNs注册完成后主动调用一次messaging().getToken()刷新FCM令牌即可,后续生成的FCM令牌即可正常绑定APNs通道,不影响推送接收。
内容的提问来源于stack exchange,提问作者Chris Okebata
相关产品推荐
相关产品推荐

