Flutter Local Notifications:后台/杀死状态下通知点击及大图通知异常
解决flutter_local_notifications的两个问题
1. 应用被杀死状态下点击通知无响应(onSelectNotification不触发)
当应用处于杀死状态时,初始化时传入的onSelectNotification不会被调用,因为此时应用还未完成初始化流程。需要在应用启动时主动检查是否是通过点击通知启动的,具体处理方式如下:
- 在
main函数中完成通知插件初始化后,调用getNotificationAppLaunchDetails方法获取启动来源信息 - 判断
didNotificationLaunchApp是否为true,如果是则提取通知的payload,执行和onSelectNotification中一致的业务逻辑
示例代码:
Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); // 保留你的原有初始化配置 const AndroidInitializationSettings androidInitSettings = AndroidInitializationSettings('@mipmap/ic_launcher'); final InitializationSettings initSettings = InitializationSettings(android: androidInitSettings); await flutterLocalNotificationsPlugin.initialize(initSettings, onSelectNotification: (payload) async { // 前台/后台状态下的通知点击逻辑 if (payload != null) { // 处理payload,比如跳转对应页面 } }); // 处理杀死状态下的通知点击 final NotificationAppLaunchDetails? launchDetails = await flutterLocalNotificationsPlugin.getNotificationAppLaunchDetails(); if (launchDetails?.didNotificationLaunchApp ?? false) { final String? payload = launchDetails?.notificationResponse?.payload; if (payload != null) { // 执行杀死状态下的通知点击逻辑,和上面onSelectNotification的逻辑保持一致 } } runApp(const MyApp()); }
2. 应用后台时大图样式通知无法正常工作
后台时大图通知失效通常是因为样式配置不完整或通知通道优先级不足,需确保以下几点:
- 创建通知时正确配置
BigPictureStyleInformation,指定大图资源、大图标等参数 - 将通知通道的
importance和priority设为high,保证后台时通知能正常展示完整样式 - 本地大图资源需放在Android项目的
drawable目录下,路径引用准确
示例代码:
Future<void> showBigPictureNotification() async { const AndroidNotificationDetails androidDetails = AndroidNotificationDetails( 'big_picture_channel_id', '大图通知通道', channelDescription: '用于展示带大图的通知', importance: Importance.high, priority: Priority.high, // 配置大图样式 styleInformation: BigPictureStyleInformation( DrawableResourceAndroidBitmap('@drawable/your_big_image'), // 本地大图资源路径 largeIcon: DrawableResourceAndroidBitmap('@mipmap/ic_launcher'), contentTitle: '大图通知标题', summaryText: '下拉查看完整大图', ), ); const NotificationDetails notificationDetails = NotificationDetails(android: androidDetails); await flutterLocalNotificationsPlugin.show( 1, // 通知唯一ID '后台大图通知', '点击查看详情', notificationDetails, payload: 'big_picture_payload', ); }
如果是远程推送的大图通知,还需要在Android原生端处理通知样式(比如FCM自定义通知),确保后台能正确解析并展示大图。
内容的提问来源于stack exchange,提问作者W Android
相关产品推荐
相关产品推荐

