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

Flutter药品提醒App中Awesome Notification通知不触发求助

排查Awesome Notifications未触发的常见问题

以下是针对Flutter药品提醒App通知未正常触发的分步排查方案:

  • 权限与平台配置检查

    • Android:确保AndroidManifest.xml中添加了POST_NOTIFICATIONS(Android 13+)权限,且正确配置了通知渠道;Android 12+还需申请SCHEDULE_EXACT_ALARM权限,可通过代码检查并引导用户开启:
      if (Platform.isAndroid) {
        final exactAlarmStatus = await AwesomeNotifications().requestExactAlarmPermission();
        if (!exactAlarmStatus) {
          // 跳转至系统设置开启精确闹钟权限
        }
      }
      
    • iOS:在Info.plist中添加NSUserNotificationUsageDescription和NSRemoteNotificationUsageDescription描述,代码中主动请求通知权限:
      await AwesomeNotifications().requestPermissionToSendNotifications();
      
  • 初始化逻辑验证
    确保App启动时完成Awesome Notifications初始化,且渠道配置与后续创建通知时的channelKey一致:

    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await AwesomeNotifications().initialize(
        'resource://drawable/your_app_icon',
        [
          NotificationChannel(
            channelKey: 'medication_reminder',
            channelName: '药品提醒',
            channelDescription: '定时推送药品服用提醒',
            importance: NotificationImportance.High,
            channelShowBadge: true,
          )
        ],
      );
      runApp(const MyApp());
    }
    
  • 通知创建逻辑排查
    检查添加提醒页面的通知创建代码,重点确认:

    • channelKey与初始化时的渠道key完全匹配
    • 定时时间转换正确,避免时区偏差(建议用ZonedDateTime或统一转换为UTC时间)
    • 通知ID唯一,避免被重复创建的通知覆盖
      示例正确的定时通知创建代码:
    await AwesomeNotifications().createNotification(
      content: NotificationContent(
        id: int.parse(firestoreDocId), // 用Firestore文档ID作为唯一ID
        channelKey: 'medication_reminder',
        title: '药品服用提醒',
        body: '该吃${medName}了,剂量:${dose}',
      ),
      schedule: NotificationCalendar(
        year: remindTime.year,
        month: remindTime.month,
        day: remindTime.day,
        hour: remindTime.hour,
        minute: remindTime.minute,
        second: 0,
        repeats: false, // 需要重复提醒则设为true并配置重复规则
      ),
    );
    
  • 后台运行与重启恢复

    • App重启后,需从Firestore读取所有未过期的药品提醒,重新创建定时通知,否则之前设置的提醒会丢失
    • iOS需开启后台刷新权限,在Info.plist的UIBackgroundModes中添加remote-notification和fetch
  • 快速测试定位问题
    先创建一个立即触发的测试通知,验证基础功能是否正常:

    await AwesomeNotifications().createNotification(
      content: NotificationContent(
        id: 999,
        channelKey: 'medication_reminder',
        title: '测试通知',
        body: '通知功能正常',
      ),
    );
    

    如果测试通知能正常显示,说明问题出在定时逻辑或时间参数上;若仍不显示,检查权限、渠道配置或包版本兼容性。

  • 日志辅助排查
    添加日志打印,查看通知创建结果及错误信息:

    final createResult = await AwesomeNotifications().createNotification(...);
    print('通知创建结果:$createResult');
    

    同时查看控制台输出,确认是否有权限被拒、渠道不存在等错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:25:09