Flutter中awesome_notification在应用关闭/杀死时不显示通知
解决Flutter应用被杀死后显示awesome_notification通知的方案
Android端处理
- 实现前台服务(Foreground Service)
Android 8.0+对后台进程限制严格,普通后台服务会被系统回收。你需要编写一个原生Android服务,将其设为前台服务(会在通知栏显示一个低优先级的持续提示),用来监听.NET Core推送的消息。在服务中接收到消息后,直接调用awesome_notification的原生API触发通知,无需依赖Flutter主进程。注意在AndroidManifest.xml中注册服务,并申请FOREGROUND_SERVICE权限。 - 配置厂商自启动与后台权限
国内小米、华为、OPPO等厂商有独立的后台管控机制,需要引导用户手动开启应用的自启动权限和后台活动权限,否则前台服务也可能被强制杀死。 - 用WorkManager实现定时轮询(非长连接场景)
如果你的推送基于HTTP短连接而非长连接,可以用Android的WorkManager创建周期性任务,定期请求.NET Core服务检查新通知。WorkManager不受应用进程状态影响,即使应用被杀死,也能在后台执行任务并触发通知。
iOS端处理
- 集成UNUserNotificationServiceExtension
iOS提供了独立于主应用的通知扩展组件,该组件不依赖主应用进程,只要推送带有content-available: 1,即使主应用被杀死,系统也会唤醒扩展处理消息。你可以在扩展中处理.NET Core的推送内容,调用系统通知API展示通知(也可与awesome_notification配合)。 - 配置APNs推送Payload
.NET Core服务向iOS设备推送时,必须在APS payload中包含"content-available": 1,同时确保推送是静默推送或包含通知内容。另外,需要在Xcode中开启项目的Remote notifications后台模式。 - 确保通知权限完全授权
引导用户开启应用的“允许通知”权限,同时开启“在锁定屏幕上显示”“通知中心显示”等选项,避免系统拦截通知。
通用注意事项
- 检查awesome_notification原生配置
Android端确认AndroidManifest.xml中注册了AwesomeNotificationsReceiver和相关服务;iOS端确认Info.plist中添加了通知权限描述,且AppDelegate中正确初始化了插件。 - .NET Core推送适配多平台
针对Android和iOS分别发送符合平台要求的推送格式:Android可直接通过HTTP请求设备本地服务(长连接场景)或调用系统通知API;iOS必须通过苹果APNs服务推送,无法直接发送到设备。
内容的提问来源于stack exchange,提问作者M.A.
相关产品推荐
相关产品推荐

