Flutter FCM/本地通知:如何获取完整原始消息?
解决Flutter Local Notifications回调拿不到完整消息的问题
- 核心原因:
NotificationResponse本身不会自动携带通知的标题、正文等内容,这些信息需要你在发送通知时主动塞进payload里,才能在回调中获取。
步骤1:发送通知时传入完整消息到payload
发送通知的代码里,把标题、正文等需要的内容通过payload传递,建议用JSON格式序列化:
await _flutterLocalNotificationsPlugin.show( 1, // 自定义通知ID "转账提醒", // 通知标题 "您收到一笔500元的转账", // 通知正文 NotificationDetails( android: AndroidNotificationDetails( 'cash_notify_channel', '资金通知频道', importance: Importance.high, ), iOS: DarwinNotificationDetails(), ), // 把完整消息序列化成JSON字符串作为payload payload: jsonEncode({ 'title': "转账提醒", 'body': "您收到一笔500元的转账", // 可添加其他自定义字段,比如转账ID、发起方信息等 }), );
步骤2:在回调中解析payload获取完整消息
修改你现有的onDidReceiveNotificationResponse回调,解析payload拿到完整内容:
onDidReceiveNotificationResponse: (NotificationResponse notificationResponse) async { log.d(notificationResponse.notificationResponseType); log.d(notificationResponse.actionId); log.d(notificationResponse.input); log.d(notificationResponse.id); // 新增解析payload的逻辑 if (notificationResponse.payload != null) { final messageData = jsonDecode(notificationResponse.payload!); log.d('完整标题:${messageData['title']}'); log.d('完整正文:${messageData['body']}'); // 这里可以拿到你之前塞进去的所有自定义数据 } }
额外说明
- 如果你是通过后台任务等其他方式触发本地通知,也要确保构建通知时传入包含完整消息的payload。
NotificationResponse的id只是通知的标识ID,和消息内容无关,无法通过它反向获取消息。
内容的提问来源于stack exchange,提问作者giorgio79
相关产品推荐
相关产品推荐

