Flutter FCM推送通知 前台运行状态下通知点击事件如何监听
Flutter前台运行时监听通知点击事件实现方案
实现逻辑很明确:应用在前台运行时 Firebase 不会自动弹出系统通知,需要配合 flutter_local_notifications 主动弹出通知,点击事件直接由该包的内置回调监听即可,具体实现步骤如下:
1. 初始化时配置通知点击回调
在初始化 flutter_local_notifications 时传入 onDidReceiveNotificationResponse 回调,该回调会在用户点击你主动弹出的前台通知时触发:
import 'dart:convert'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; final FlutterLocalNotificationsPlugin localNotificationsPlugin = FlutterLocalNotificationsPlugin(); Future<void> initLocalNotification() async { // 安卓端初始化配置,替换为你自己的应用图标名 const AndroidInitializationSettings androidInit = AndroidInitializationSettings('@mipmap/ic_launcher'); // iOS端初始化配置 const DarwinInitializationSettings iosInit = DarwinInitializationSettings(); const InitializationSettings initSettings = InitializationSettings( android: androidInit, iOS: iosInit, ); await localNotificationsPlugin.initialize( initSettings, // 前台通知点击回调 onDidReceiveNotificationResponse: (NotificationResponse response) { // 取出弹出通知时传入的 payload 数据 final String? payload = response.payload; if (payload != null) { // 解析为原始通知数据后处理业务逻辑,比如跳转页面、执行指定操作 Map<String, dynamic> notificationData = jsonDecode(payload); // 此处编写你的业务处理代码 } }, ); }
2. 监听前台 Firebase 消息,主动弹出通知
监听 FirebaseMessaging.onMessage 流,应用在前台收到推送时手动调用弹窗方法,同时把通知携带的数据作为 payload 传入:
void listenForegroundMessage() { FirebaseMessaging.onMessage.listen((RemoteMessage message) { final RemoteNotification? notification = message.notification; final AndroidNotification? androidNotification = message.notification?.android; // 校验通知不为空时弹出系统通知 if (notification != null && androidNotification != null) { localNotificationsPlugin.show( notification.hashCode, notification.title, notification.body, NotificationDetails( android: AndroidNotificationDetails( // 替换为你自己配置的通知渠道ID、名称、描述 'custom_notification_channel', '消息通知', channelDescription: '用于接收应用推送消息', importance: Importance.max, priority: Priority.high, ), ), // 将Firebase携带的自定义数据转成JSON字符串传入 payload: jsonEncode(message.data), ); } }); }
注意事项
- 安卓端需要提前配置好通知渠道,否则前台通知无法正常弹出
- iOS端需要先向用户申请通知权限,否则无法接收任何推送通知
- 建议将自定义数据以JSON字符串格式作为payload传递,解析和使用更方便
内容的提问来源于stack exchange,提问作者Ajay Kumar
相关产品推荐
相关产品推荐

