You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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插件会自动引入对应依赖,手动添加容易导致版本冲突:

  1. 删除Podfile中pod 'Firebase/Core'、pod 'Firebase/Messaging'等手动添加的Firebase相关pod声明
  2. 进入项目ios目录,执行以下命令重装依赖:
pod deintegrate && pod install

四、测试注意事项

  • iOS推送必须用真实设备测试,模拟器不支持接收推送
  • 你观察到的Android特有的后台服务启动日志是正常现象,iOS后台推送机制和Android不同,不会打印该日志,无需纠结
  • 先验证能否正常获取FCM token:运行应用后查看控制台是否打印TOKEN TAKEN xxx,如果token为null,先排查权限和配置问题
  • 优先用Firebase控制台的测试推送功能发测试通知,直接填入获取到的iOS设备token,先排除后端推送参数错误的问题

内容的提问来源于stack exchange,提问作者Berat Kurt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:45:01