Flutter FCM推送Android正常iOS端自定义Payload无法接收问题
问题根因分析
你当前的问题核心出在APNs推送配置和Payload参数冲突,Firebase控制台发的通知会自动补全正确的APNs参数,但自定义Payload的时候你写错了几个关键配置:
解决步骤
1. 修正云函数的Payload配置
你当前配置为静默后台推送,却同时携带了需要弹窗展示的通知内容,导致APNs直接丢弃了推送:
- 把
apns.headers中的apns-push-type从background改为alert,带弹窗的通知必须用alert类型 - 把
apns-priority从5改为10,非静默推送优先级必须设为10才能正常触发弹窗 - 修正
apns-topic的值,当前你填的io.flutter.plugins.firebase.messaging是错误值,要替换为你Xcode中配置的应用专属Bundle ID - 如果不需要静默后台更新能力,可直接删除
aps中的contentAvailable: true配置,避免冲突
修正后的apns字段示例:
apns: { payload: { aps: { sound: 'default', // 可选,推送带默认提示音 badge: 1 // 可选,推送带角标计数 }, }, headers: { "apns-push-type": "alert", "apns-priority": "10", "apns-topic": "你的应用实际Bundle ID", }, },
2. 检查Xcode项目配置
- 打开项目的
Signing & Capabilities标签,确认已添加Push Notifications能力 - 确认已添加
Background Modes能力,且勾选了Remote notifications选项 - 确认Firebase控制台的
项目设置 > 云消息传递 > Apple 应用配置中,已上传正确的APNs认证密钥(.p8文件)或者开发/生产环境的推送证书
3. 补全AppDelegate的通知配置
你当前的AppDelegate缺少前台通知展示的代理配置,添加如下代码:
首先在didFinishLaunchingWithOptions中添加权限请求和代理设置:
override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { GeneratedPluginRegistrant.register(with: self) // 新增以下代码 UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ } ) application.registerForRemoteNotifications() return super.application(application, didFinishLaunchingWithOptions: launchOptions) }
再添加前台展示通知的代理方法:
override func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { completionHandler([.alert, .badge, .sound]) }
4. 验证Token有效性
打印你云函数中获取的deviceToken.data()['tokens']值,直接在Firebase控制台给该Token单独发送测试推送:
- 如果能收到,说明是Payload配置问题,按第一步修正即可
- 如果收不到,说明客户端Token获取异常,检查Flutter端是否正确调用了
FirebaseMessaging.instance.getToken()获取iOS设备的FCM Token
内容的提问来源于stack exchange,提问作者Gbenga B Ayannuga
相关产品推荐
相关产品推荐

