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

Flutter iOS应用前台FCM推送通知无法接收问题求助

解决Flutter iOS应用前台无法接收FCM推送通知的问题

针对你的问题,核心原因是iOS系统对前台推送的处理逻辑与后台不同,需要额外配置才能在前台展示通知。以下是具体的修复步骤:


1. 配置FirebaseMessaging前台展示选项

在请求权限后,添加前台通知展示权限设置,确保iOS允许在前台显示通知弹窗、角标和声音:

// 在requestPermission之后添加
await messaging.setForegroundNotificationPresentationOptions(
  alert: true, // 允许显示弹窗
  badge: true, // 允许更新角标
  sound: true, // 允许播放声音
);

2. 完善flutter_local_notifications的iOS配置

你的代码中仅配置了Android端的通知详情,缺少iOS端配置,导致前台无法弹出通知:

初始化插件时补充iOS设置

// 初始化flutter_local_notifications时添加iOS配置
final IOSInitializationSettings iosInitSettings = IOSInitializationSettings(
  requestAlertPermission: true,
  requestBadgePermission: true,
  requestSoundPermission: true,
);

final InitializationSettings initSettings = InitializationSettings(
  android: AndroidInitializationSettings('@mipmap/ic_launcher'),
  iOS: iosInitSettings,
);

await flutterLocalNotificationsPlugin.initialize(initSettings);

显示通知时添加iOS详情

修改onMessage监听器中的show方法,补充iOS通知配置:

FirebaseMessaging.onMessage.listen((RemoteMessage event) {
  print("message received");
  print(event.notification!.body);
  flutterLocalNotificationsPlugin.show(
    1,
    event.notification!.title.toString(),
    event.notification!.body.toString(),
    NotificationDetails(
      android: AndroidNotificationDetails(
        channel.id,
        channel.name,
        color: Colors.amber,
        playSound: true,
        icon: '@mipmap/ic_launcher',
      ),
      // 新增iOS通知配置
      iOS: IOSNotificationDetails(
        presentAlert: true,
        presentBadge: true,
        presentSound: true,
      ),
    ),
  );
});

3. 检查iOS原生配置

确保Xcode项目中的以下配置正确:

  • 在Signing & Capabilities中启用Push Notifications
  • 在Background Modes中勾选Remote notifications
  • Info.plist中添加必要的权限描述:
    <key>NSAlertUsageDescription</key>
    <string>需要通知权限来接收消息提醒</string>
    <key>NSBadgeUsageDescription</key>
    <string>需要角标权限来显示未读消息数</string>
    <key>NSSoundUsageDescription</key>
    <string>需要声音权限来播放通知提示音</string>
    

4. 验证监听器触发状态

发送测试推送时,观察控制台是否输出message received:

  • 如果无输出:检查FCM token是否正确、推送目标token是否匹配,以及Firebase控制台推送配置是否选择了"通知"类型(数据消息需额外处理逻辑)
  • 如果有输出:说明问题出在通知展示环节,检查上述flutter_local_notifications的iOS配置是否完整

完成以上步骤后,应用即可在前台正常接收并展示FCM推送通知。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:51:01