React Native Firebase推送通知安卓正常iOS simulator失效求助
React Native Firebase iOS模拟器推送失效排查方案
先确认基础前提
- 只有运行iOS 16及以上系统、搭配Xcode 14及以上版本的iOS模拟器才支持远程推送,如果你的开发环境低于这个版本,不用排查配置,直接换真机测试,老版本模拟器本身就没有接收远程推送的能力。
配置项逐点排查
- 校验Xcode端能力配置
- 打开iOS项目下的
.xcworkspace文件,选中主应用target,进入Signing & Capabilities页,确认已经添加Push Notifications能力 - 同步添加
Background Modes能力,勾选其中的Remote notifications选项 - 检查项目中的
GoogleService-Info.plist是从Firebase控制台对应iOS应用下载的版本,不是Android端配置文件,且右侧Target Membership中已勾选主应用target,会被打包进安装包
- 打开iOS项目下的
- 校验Firebase初始化与APNS对接状态
- 启动App时观察Xcode控制台日志,搜索
Firebase/Messaging相关输出,如果出现Failed to fetch APNS token类报错,说明APNS对接环节有问题 - 如果你在
Info.plist中手动把FirebaseAppDelegateProxyEnabled设为了NO,必须在AppDelegate.mm中补充代码把APNS token回传给Firebase,否则FCM拿不到有效设备token:- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [RCTMessaging didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; } - 确认Firebase控制台iOS应用配置中,APNS密钥/证书和当前编译环境匹配:Debug包走APNS沙盒环境,Release包走生产环境,不要混用证书
- 启动App时观察Xcode控制台日志,搜索
- 校验模拟器权限与token有效性
- 打开模拟器的系统设置,找到你的应用,确认通知权限处于开启状态;如果之前点过拒绝权限,直接卸载App重装重新触发权限弹窗即可
- 不要用旧的FCM token发测试通知:模拟器上每次重装App、重置模拟器都会导致FCM token刷新,在App入口加日志打印当前最新token,发测试消息时直接复制最新token使用:
import messaging from '@react-native-firebase/messaging'; // 应用启动后执行 const checkPushConfig = async () => { // 申请权限 const authStatus = await messaging().requestPermission(); const hasPermission = authStatus === messaging.AuthorizationStatus.AUTHORIZED || authStatus === messaging.AuthorizationStatus.PROVISIONAL; if (!hasPermission) { console.log('未获取推送权限'); return; } // 打印当前有效token const fcmToken = await messaging().getToken(); console.log('当前设备FCM token:', fcmToken); }; checkPushConfig();
代码逻辑常见坑
- 配置完推送相关能力、修改完原生配置后,必须在Xcode中执行
Clean Build Folder(快捷键Cmd+Shift+K),再重新编译运行,否则新配置不会生效,不要直接用react-native run-ios热更新就开始测试 - iOS端App在前台运行时默认不会弹出通知横幅,需要提前配置前台展示选项,否则即使消息送达也看不到提示:
messaging().setForegroundNotificationPresentationOptions({ alert: true, badge: true, sound: true, }); - 如果用Firebase控制台发测试通知,不要填错应用的Bundle ID,确保和Xcode中配置的Bundle ID完全一致。
快速定位问题环节
如果以上配置都检查完还是收不到通知,可以直接用Xcode生成的.apns测试文件拖拽到模拟器上触发本地测试推送:如果能正常弹出通知,说明模拟器本身的推送能力、App的通知处理逻辑都没问题,问题出在Firebase和APNS的对接配置上,回去核对Firebase控制台的APNS密钥配置即可;如果连本地测试推送都弹不出来,说明是App端的通知能力配置、权限配置有问题,重新走上面的配置检查流程。
内容的提问来源于stack exchange,提问作者ttars
相关产品推荐
相关产品推荐

