React Native iOS端无法接收Firebase Cloud Messaging通知求助
React Native iOS 无法接收FCM通知的排查方案
核心排查方向
结合给出的配置、代码和测试结果,以下是针对性的排查步骤:
1. 区分消息类型与APP状态的处理逻辑
iOS对FCM的两种消息类型处理逻辑完全不同:
- 前台状态:
notification类型消息不会触发系统通知栏,仅通过onMessage回调接收。如果该回调未触发:- 确认
@react-native-firebase/messaging与其他Firebase依赖版本一致,版本不兼容会导致回调失效。 - 尝试将
onMessage注册逻辑移至getToken成功的回调内,确保权限与token就绪后再监听。
- 确认
- 后台/杀死状态:
notification类型消息由APNs直接处理,会弹出系统通知栏。如果后台无响应:- 重新勾选Xcode中
Background Modes的Remote notifications,重启Xcode清除配置缓存。 - 确认Firebase的APNs密钥环境与Xcode Build Configuration匹配:Debug用开发密钥,Release用生产密钥,或使用兼容两者的通用密钥。
- 重新勾选Xcode中
2. 调整消息Payload格式测试
当前的请求Payload可能存在触发逻辑问题,建议分两种情况测试:
测试纯数据消息(需APP自行处理所有状态)
{ "data": { "title": "测试数据消息", "body": "这是一条纯数据类型的FCM消息" }, "to": "你的FCM Token", "content_available": true }
测试带APNs配置的通知消息(强制APNs处理)
{ "notification": { "body": "测试通知消息", "title": "来自Postman" }, "apns": { "payload": { "aps": { "alert": { "title": "来自Postman", "body": "测试通知消息" }, "sound": "default" } } }, "to": "你的FCM Token" }
3. 验证APNs基础连通性
- 核对Firebase控制台中APNs密钥的
Key ID、Team ID与Apple Developer后台完全一致,且密钥已启用APNs服务。 - 使用Apple官方工具直接发送APNs通知到设备的APNs Token(可通过
messaging().getAPNSToken()获取),确认设备能接收APNs消息,排除APNs链路问题。
4. 补充代码配置
- 确保
AppDelegate中已初始化Firebase:
(Objective-C示例)#import <Firebase.h> - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [FIRApp configure]; // 其他初始化代码 return YES; } - 添加后台消息处理回调,覆盖后台状态的消息接收:
messaging().setBackgroundMessageHandler(async remoteMessage => { console.log('后台消息已处理:', remoteMessage); });
5. 其他细节排查
- 检查设备通知权限:进入设置→你的APP→通知,确认开启所有通知权限(横幅、声音等)。
- 卸载重装APP,重新获取FCM Token后再测试,避免缓存的旧配置干扰。
- 重新添加Xcode的
Push Notifications能力,确保Provisioning Profile包含Push权限。
内容的提问来源于stack exchange,提问作者Spritrl
相关产品推荐
相关产品推荐

