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

iOS设备及模拟器无法接收FCM数据消息与前台推送通知问题求助

导致iOS端无法接收对应FCM消息的常见原因

1. 代理配置缺失

你在Info.plist中把FirebaseAppDelegateProxyEnabled设为了false,但没有手动实现APNS Token的转发逻辑,FCM无法获取APNS生成的有效设备Token,会导致所有推送都无法送达,需要在AppDelegate中补充以下代码:

override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  Messaging.messaging().apnsToken = deviceToken
  super.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)
}

2. 未主动申请通知权限

应用首次启动时没有主动申请用户通知权限,iOS默认不会授予通知权限,所有通知类推送和前台消息都会被系统拦截,需要在Dart层初始化时主动调用权限申请接口:

NotificationSettings settings = await FirebaseMessaging.instance.requestPermission(
  alert: true,
  announcement: false,
  badge: true,
  carPlay: false,
  criticalAlert: false,
  provisional: false,
  sound: true,
);
// 可打印settings.authorizationStatus确认权限是否授予

3. 推送Payload配置错误

你云函数中的FCM推送Payload存在多处配置错误:

  • apns-topic字段取值错误,应填写你的应用实际Bundle ID,而非示例值io.flutter.plugins.firebase.messaging
  • 如果你要发送纯数据静默消息,Payload不能包含notification字段,否则APNS会将其识别为普通通知推送,不会触发应用的静默消息回调
  • VoIP场景的推送类型应设置为voip而非background,后台类型推送优先级低,极易被iOS系统节流拦截

4. 前台通知展示逻辑缺失

iOS系统默认不会在应用前台运行时展示通知横幅,你接收到FirebaseMessaging.onMessage事件后,需要主动调用awesome_notifications的接口手动弹出通知,仅打印日志不会有可见的通知展示。

5. 调试环境不匹配

如果你当前使用Debug开发证书运行应用,需要确认Firebase控制台上传的APNS密钥同时支持开发和生产环境,或者在推送Payload的apns配置中明确指定production: false,生产环境的推送无法被开发环境的设备接收,反之亦然。

6. 静默消息被系统节流

iOS对普通静默数据消息的节流机制非常严格,短时间内发送多条静默消息时,后续消息会被系统直接拦截,不会传递给应用。VoIP场景建议使用PushKit框架接收专属VoIP推送,不要使用普通FCM静默消息实现,后者的到达率极低,无法满足VoIP呼叫的实时性要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:27:03