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

Flutter本地通知在iOS端无法正常工作,请求排查解决

iOS模拟器本地通知无法显示的排查与修复方案

你的问题是Android端本地通知正常工作,但iOS模拟器完全无法显示通知,以下是针对你提供的代码的问题分析和修复方案:

问题点分析

  1. 未请求iOS通知权限:代码中仅针对Android调用了requestPermission(),但iOS端没有触发权限请求逻辑——即使初始化时设置了权限请求参数,仍需主动调用对应平台的权限请求方法。
  2. 缺少iOS端通知配置:当前NotificationDetails仅配置了Android的通知参数,iOS端没有对应的DarwinNotificationDetails配置,导致通知无法在iOS系统中正确渲染。
  3. 模拟器权限未确认:iOS模拟器默认可能未开启应用通知权限,需要手动确认或通过代码触发授权弹窗。

修复后的完整代码

FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();

// 分别处理Android和iOS的权限请求
final androidImpl = flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>();
if (androidImpl != null) {
  await androidImpl.requestPermission();
}

final iosImpl = flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<IOSFlutterLocalNotificationsPlugin>();
if (iosImpl != null) {
  await iosImpl.requestPermissions(
    alert: true,
    badge: true,
    sound: true,
  );
}

const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('icon');

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

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

await flutterLocalNotificationsPlugin.initialize(
  initializationSettings,
  onDidReceiveNotificationResponse: onDidReceiveNotificationResponse,
);

// 配置Android通知详情
const AndroidNotificationDetails androidNotificationDetails = AndroidNotificationDetails(
  'can1',
  'Channel 1',
  channelDescription: "Desc here",
  importance: Importance.max,
  priority: Priority.high,
  ticker: 'ticker',
);

// 配置iOS通知详情
const DarwinNotificationDetails iosNotificationDetails = DarwinNotificationDetails(
  presentAlert: true,
  presentBadge: true,
  presentSound: true,
);

// 整合多平台通知详情
const NotificationDetails notificationDetails = NotificationDetails(
  android: androidNotificationDetails,
  iOS: iosNotificationDetails,
);

await flutterLocalNotificationsPlugin.show(
  0,
  'Notification is working!',
  'Hello world',
  notificationDetails,
  payload: 'item x',
);

额外验证步骤

  1. 检查模拟器通知权限:打开模拟器的「设置」→「通知」→ 找到你的应用,确认「允许通知」已开启,且提醒样式、声音等权限已启用。
  2. 确认AppDelegate配置:确保AppDelegate.swift中已正确集成通知代理,实现UNUserNotificationCenterDelegate的相关方法并设置代理对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:32:27