Flutter中Awesome Notifications点击动作按钮时如何打印Payload数据
解决Awesome Notifications动作按钮点击时访问Payload数据的问题
方案1:发送通知时将Payload数据嵌入指定字段
不管是本地通知还是远程推送,发送阶段需要把要传递的Payload数据,要么塞进每个动作按钮的actionData字段,要么放到通知全局的payload字段里。
远程推送示例(以Firebase推送为例)
构造推送Payload时,要按Awesome Notifications的格式嵌套动作按钮数据:
{ "notification": { "title": "测试通知", "body": "点击按钮查看数据" }, "data": { "global_key": "global_value" }, "android": { "notification": { "actions": [ { "actionType": "Default", "actionKey": "VIEW_DATA", "buttonText": "查看数据", "actionData": { "payload_key": "payload_value" } } ] } } }
本地通知示例(Flutter)
创建通知时直接指定全局Payload和按钮专属数据:
await AwesomeNotifications().createNotification( content: NotificationContent( id: 1, channelKey: 'basic_channel', title: '测试通知', body: '点击按钮查看数据', payload: {'global_key': 'global_value'} // 全局Payload ), actionButtons: [ NotificationActionButton( key: 'VIEW_DATA', label: '查看数据', actionType: ActionType.Default, actionData: {'payload_key': 'payload_value'} // 按钮专属数据 ) ] );
方案2:在onReceivedAction回调中提取数据
ReceivedAction对象本身就包含了两处可读取的Payload数据,直接读取即可:
Future<void> onReceivedActionMethod(ReceivedAction receivedAction) async { // 读取按钮专属的actionData if (receivedAction.actionData != null) { print('按钮专属Payload: ${receivedAction.actionData}'); var targetValue = receivedAction.actionData!['payload_key']; print('提取到的按钮数据: $targetValue'); } // 读取通知全局的payload if (receivedAction.notification?.content?.payload != null) { print('全局Payload: ${receivedAction.notification!.content!.payload}'); var globalValue = receivedAction.notification!.content!.payload!['global_key']; print('提取到的全局数据: $globalValue'); } }
关键注意点
- 远程推送时,要确保推送Payload的格式符合Awesome Notifications的要求,尤其是Android端的
actions字段必须正确嵌套在android.notification下 - Firebase推送的
data字段会自动映射到通知的全局payload中,无需额外处理 - 测试前务必确认发送的通知确实携带了
actionData或payload,避免因发送端数据缺失导致读取失败
内容的提问来源于stack exchange,提问作者Akshu BaWa
相关产品推荐
相关产品推荐

