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

Flutter_local_notifications:模拟器显通知但iPhone真机不显示如何解决?

Flutter iOS真机本地通知不工作的解决方案

以下是针对iOS真机通知失效问题的排查和修复步骤:

1. 确认通知权限已被正确授予

iOS要求用户明确授予通知权限,仅在初始化时设置请求参数可能不够,需主动检查权限状态并处理未授权场景:

修改initNotification方法,补充权限检查逻辑:

Future<void> initNotification() async {
  // 初始化时区(关键前置步骤)
  tz.initializeTimeZones();

  final AndroidInitializationSettings initializationSettingsAndroid =
      AndroidInitializationSettings('@drawable/ic_ac_unit');

  final DarwinInitializationSettings initializationSettingsiOS =
      DarwinInitializationSettings(
    requestAlertPermission: true,
    requestBadgePermission: true,
    requestSoundPermission: true,
  );

  final InitializationSettings initializationSettings =
      InitializationSettings(
    android: initializationSettingsAndroid,
    iOS: initializationSettingsiOS,
  );

  // 初始化插件并校验权限状态
  final bool initialized = await flutterLocalNotificationsPlugin.initialize(initializationSettings);
  if (initialized) {
    final NotificationSettings settings = await flutterLocalNotificationsPlugin.getNotificationSettings();
    if (settings.authorizationStatus != AuthorizationStatus.authorized) {
      // 主动重新请求权限
      await flutterLocalNotificationsPlugin.requestPermissions(
        ios: const IOSNotificationSettings(
          alert: true,
          badge: true,
          sound: true,
        ),
      );
    }
  }
}

2. 修复时区初始化问题

使用zonedSchedule必须先初始化时区,否则真机会因时区解析错误导致通知不触发。在调用任何时区相关方法前添加:

tz.initializeTimeZones();

建议放在main函数开头,或initNotification方法的第一行。

3. 修正通知声音配置

iOS系统默认声音无需指定后缀,将DarwinNotificationDetails中的sound字段改为default:

iOS: DarwinNotificationDetails(
  sound: 'default', // 替换原有的'default.wav'
  presentAlert: true,
  presentBadge: true,
  presentSound: true,
),

若使用自定义声音,需确保声音文件已添加到iOS项目中,并在Info.plist中完成声明。

4. 检查iOS系统通知设置

  • 打开iPhone「设置」→「通知」→ 找到你的应用,确认「允许通知」已开启,且「横幅样式」「声音」等选项未被禁用。
  • 若用户曾拒绝过通知权限,需引导用户手动进入设置开启。

5. 验证Xcode项目配置

  • 打开Xcode中的Runner项目,进入「Signing & Capabilities」标签,确认「Push Notifications」能力已添加(本地通知虽无需推送证书,但该能力需开启)。
  • 确保Info.plist中无禁用通知的配置项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:10:21