Flutter应用被杀死/终止时如何显示本地通知?
Flutter应用被杀死/终止时如何显示本地通知?
嗨,我来帮你搞定这个问题!咱们用flutter_local_notifications的时候,应用在前台或后台能正常发通知,但一旦被彻底杀死,插件本身就没法触发了——因为它依赖应用进程运行。这时候得结合系统级的后台任务工具,分安卓和iOS两种情况来处理:
安卓端处理方案
- 推荐用
workmanager或者android_alarm_manager_plus这类插件来创建后台任务,让系统在指定时间唤醒任务,再调用通知插件发通知。- 大致步骤是:
- 在
pubspec.yaml里添加对应插件的依赖,比如workmanager: ^0.5.1(记得用最新版本) - 初始化WorkManager,注册一个一次性或周期性任务,设置好你要触发通知的时间点。
- 在任务的回调函数里,初始化
flutter_local_notifications实例,然后调用通知发送方法。
- 在
- 要注意的坑:
- 安卓12及以上版本,得提前申请
POST_NOTIFICATIONS权限;还要在AndroidManifest.xml里添加RECEIVE_BOOT_COMPLETED权限,这样设备重启后任务还能生效。 - 小米、华为、OPPO这些定制系统,得手动给应用开“后台运行权限”和“自启动权限”,不然系统会直接掐掉后台任务。
- 安卓12及以上版本,得提前申请
- 大致步骤是:
iOS端处理方案
- iOS的后台限制比较严,得依托系统的本地通知调度机制:
- 其实
flutter_local_notifications已经封装了iOS的UNNotificationRequest,只要配置对就能在后台甚至应用被杀死时触发:- 在
Info.plist里开启UIBackgroundModes中的remote-notification(别担心,本地通知也能用到这个权限),如果需要自定义通知内容,还要配置notification-content-extension。 - 调度通知时用
zonedSchedule方法,iOS这边要把uiLocalNotificationDateInterpretation设为UILocalNotificationDateInterpretation.wallClockTime,确保是按真实时间触发。
- 在
- 要是需要精确到秒的通知,iOS 15+可以用
BGTaskScheduler,但这个得向苹果说明用途,审核可能会严格,非必要不建议用。
- 其实
测试小技巧
别直接从最近任务列表划掉应用来测试哦,有些安卓厂商会直接终止所有相关进程,最好用adb命令adb shell am kill com.your.app.package来模拟真正的应用终止状态,这样测试结果更准确。
备注:内容来源于stack exchange,提问作者Nafis Ligari
相关产品推荐
相关产品推荐

