Flutter集成FCM后Android系统托盘不显示通知问题求助
Flutter FCM无法显示系统托盘通知的解决方案
核心原因
FCM在App前台运行时不会自动触发系统托盘通知,需手动借助本地通知插件实现;同时Android 8.0+要求配置通知通道,还要确保Manifest权限、图标等配置完整。
1. 集成本地通知插件
通过flutter_local_notifications插件处理系统托盘通知:
- 在
pubspec.yaml添加依赖:
dependencies: flutter: sdk: flutter firebase_core: ^2.1.1 firebase_messaging: ^14.0.3 flutter_local_notifications: ^14.1.1
- 初始化插件(建议在Firebase初始化后调用):
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; final FlutterLocalNotificationsPlugin _localNotifications = FlutterLocalNotificationsPlugin(); Future<void> initLocalNotifications() async { const AndroidInitializationSettings androidInit = AndroidInitializationSettings('@mipmap/ic_launcher'); // 替换为你的通知图标资源 const InitializationSettings initSettings = InitializationSettings(android: androidInit); await _localNotifications.initialize(initSettings); }
2. 修改消息监听逻辑,触发系统通知
更新FCM前台消息监听,收到通知时调用本地插件显示系统托盘通知:
FirebaseMessaging.onMessage.listen((RemoteMessage event) { print("Firebase messaging recieved"); print(event.notification!.body); // 配置Android通知参数 const AndroidNotificationDetails androidDetails = AndroidNotificationDetails( 'app_notification_channel', // 自定义通道ID '应用通知', // 通道名称 channelDescription: '接收应用推送通知的通道', // 通道描述 importance: Importance.max, priority: Priority.high, enableVibration: true, ); const NotificationDetails notificationDetails = NotificationDetails(android: androidDetails); // 显示系统托盘通知 _localNotifications.show( DateTime.now().millisecondsSinceEpoch ~/ 1000, // 唯一通知ID event.notification!.title, event.notification!.body, notificationDetails, ); });
3. 完善AndroidManifest配置
- 添加Android 13+通知权限:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
- 在
application标签内配置默认通知图标和通道ID(需与代码中通道ID一致):
<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@mipmap/ic_launcher" /> <meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="app_notification_channel" />
4. 确认消息发送类型
在Firebase控制台发送通知时,选择「通知」类型(而非纯数据消息)。混合消息(含通知和数据字段)在App后台会自动触发系统通知,前台则通过上述代码处理。
内容的提问来源于stack exchange,提问作者Pallavi Tapkir
相关产品推荐
相关产品推荐

