Flutter集成Firebase Messaging推送通知在iOS端无法生效问题求助
解决方案
一、代码问题修复
1. 补充AppDelegate.swift的APNs token绑定逻辑
iOS必须将系统注册得到的APNs token同步给Firebase Messaging,否则FCM无法识别设备,你当前的AppDelegate缺这个核心方法,添加后完整代码如下:
import UIKit import Flutter import Firebase @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { FirebaseApp.configure() GeneratedPluginRegistrant.register(with: self) if #available(iOS 10.0, *) { UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ in } ) } else { let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) application.registerUserNotificationSettings(settings) } application.registerForRemoteNotifications() return super.application(application, didFinishLaunchingWithOptions: launchOptions) } // 新增以下方法,绑定APNs token到FCM override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken super.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken) } }
2. 修复Dart通知逻辑的问题
- 你的
onMessage回调仅打印了日志,没有调用本地通知展示:iOS前台默认不会弹出系统通知,需要你主动调用flutter_local_notifications展示 - 本地通知的初始化逻辑不要写在后台回调里,要全局只初始化一次,避免重复初始化异常
- 确保
NotificationService.init()在main函数中Firebase.initializeApp()执行完成后再调用
二、Xcode配置检查
- 打开Xcode项目,进入
Signing & Capabilities标签,确认添加了两个能力:- Push Notifications
- Background Modes,并勾选其中的
Remote notifications选项
- 确认项目的Bundle ID和Firebase控制台中注册的iOS应用Bundle ID完全一致,大小写也不能有偏差
- 登录Apple开发者账号,生成对应环境(开发/生产)的APNs证书,上传到Firebase控制台→项目设置→iOS应用→云消息配置页中
三、依赖冲突排查
你当前Podfile中手动添加了Firebase相关的pod依赖,FlutterFire插件会自动引入对应依赖,手动添加容易导致版本冲突:
- 删除Podfile中
pod 'Firebase/Core'、pod 'Firebase/Messaging'等手动添加的Firebase相关pod声明 - 进入项目ios目录,执行以下命令重装依赖:
pod deintegrate && pod install
四、测试注意事项
- iOS推送必须用真实设备测试,模拟器不支持接收推送
- 你观察到的Android特有的后台服务启动日志是正常现象,iOS后台推送机制和Android不同,不会打印该日志,无需纠结
- 先验证能否正常获取FCM token:运行应用后查看控制台是否打印
TOKEN TAKEN xxx,如果token为null,先排查权限和配置问题 - 优先用Firebase控制台的测试推送功能发测试通知,直接填入获取到的iOS设备token,先排除后端推送参数错误的问题
内容的提问来源于stack exchange,提问作者Berat Kurt
相关产品推荐
相关产品推荐

