Flutter应用Android可正常接收Firebase推送 iOS设备无法接收求解
修复步骤
- 补全iOS通知权限申请逻辑
iOS 10及以上版本必须主动向用户申请通知权限才能接收推送,你现有代码中未包含权限申请逻辑,在main.dart中Firebase.initializeApp()之后添加如下代码:
NotificationSettings settings = await FirebaseMessaging.instance.requestPermission( alert: true, badge: true, sound: true, provisional: false, ); // 可选:打印权限状态确认授权结果 debugPrint('通知授权状态: ${settings.authorizationStatus}'); // 可选:获取FCM Token确认和Firebase连接正常 String? fcmToken = await FirebaseMessaging.instance.getToken(); debugPrint('当前设备FCM Token: $fcmToken');
拿到FCM Token后可以先去Firebase控制台的「Cloud Messaging」测试推送功能直接发测试通知,优先排除服务端发送逻辑的问题。
- 修改AppDelegate.swift配置
你现有AppDelegate缺少APNs注册、Token同步逻辑,替换为如下代码:
import UIKit import Flutter import Firebase @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { FirebaseApp.configure() // 新增:注册APNs远程通知、设置通知代理 application.registerForRemoteNotifications() UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } // 新增:同步APNs Token到Firebase override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken super.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken) } }
- 核对配置一致性
- 确认你的APNs证书绑定的Bundle ID和当前Flutter iOS项目的Bundle ID完全一致,无拼写、大小写、前后缀差异
- 确认当前打包的环境和APNs证书环境对应:真机测试用开发环境证书,App Store/TestFlight打包用生产环境证书,不要混用
- 确认Firebase控制台Cloud Messaging设置页上传的APNs证书就是当前项目对应的证书,不要错传其他应用的证书
- 核对推送Payload格式
iOS系统下如果推送Payload仅包含data字段,后台状态不会主动弹出通知栏提醒,需要同时携带notification字段才能触发系统展示:
{ "notification": { "title": "通知标题", "body": "通知内容" }, "data": { "自定义key": "自定义值" }, "token": "目标设备FCM Token" }
- 检查系统版本兼容
你使用的firebase_messaging: 9.1.2版本要求iOS最低部署版本为10.0,确认Xcode中项目的iOS Deployment Target设置不低于10.0。
内容的提问来源于stack exchange,提问作者Emir Kutlugün
相关产品推荐
相关产品推荐

