Flutter iOS端无法接收Firebase Cloud Messaging通知问题求助
iOS端FCM通知接收失败排查方案
权限验证
- 确认代码中已正确请求通知权限,且用户已授权:
去iOS系统设置→对应App→通知,检查「允许通知」开关是否开启,且声音、提醒样式等选项未禁用。final messaging = FirebaseMessaging.instance; final settings = await messaging.requestPermission( alert: true, badge: true, sound: true, );
APNs与证书配置
- 检查Apple开发者账号中,对应App ID已开启「推送通知」服务,且已生成开发/生产环境的推送证书,并上传至Firebase控制台的项目设置→Cloud Messaging→Apple应用配置中。
- 推送测试需匹配环境:Xcode真机调试对应开发环境,AdHoc/AppStore打包对应生产环境,发送推送时需指定正确环境(或在FCM payload中设置
apns_environment)。
FCM消息结构与回调
- 后端发送的FCM payload需包含iOS所需的
aps字段,示例:{ "notification": { "title": "测试通知", "body": "这是一条测试消息" }, "apns": { "payload": { "aps": { "sound": "default" } } }, "token": "DEVICE_FCM_TOKEN" } - 确认前台消息处理逻辑:iOS前台不会自动弹出通知,需在
FirebaseMessaging.onMessage.listen中调用本地通知服务(如flutter_local_notifications)展示通知。 - 后台/杀死状态的消息监听需使用顶级函数注册
FirebaseMessaging.onBackgroundMessage,不能用类成员方法(iOS后台沙箱限制)。
Xcode配置细节
- 确认
GoogleService-Info.plist已添加到Xcode项目的Target中(添加时勾选「Copy items if needed」),且文件内的GCM_SENDER_ID、CLIENT_ID与Firebase控制台一致。 - 在
Info.plist中添加以下配置,避免AppDelegate代理冲突:<key>FirebaseAppDelegateProxyEnabled</key> <string>NO</string> - 确认Xcode中「Signing & Capabilities」已勾选「Push Notifications」,且「Background Modes」中勾选「Remote notifications」。
依赖与初始化
- 检查
pubspec.yaml中依赖版本兼容性,推荐使用稳定版:firebase_core: ^2.15.0 firebase_messaging: ^14.6.5 flutter_local_notifications: ^16.1.0 - 确保
main函数中先初始化Firebase:void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(const MyApp()); }
测试注意事项
- 必须使用iOS真机测试推送,模拟器不支持APNs服务。
- 测试杀死App后的推送时,确保设备网络正常,可通过
FirebaseMessaging.instance.getToken()获取有效token,在Firebase控制台直接推送测试。
内容的提问来源于stack exchange,提问作者César Espíndola
相关产品推荐
相关产品推荐

