Flutter使用FCM仅传data字段,后台/终止时出现空通知问题
解决FCM后台/终止状态下显示两条通知的问题
问题原因
你在Cloud Functions的消息发送配置中保留了android.notification字段,哪怕仅设置了channelId,FCM SDK在应用处于后台或终止状态时,仍会将这条消息识别为包含通知属性的消息,自动生成一条无标题无内容的空通知;再加上你用awesome_notifications自定义创建的通知,最终出现两条通知的情况。
解决方案
1. 修改Cloud Functions发送代码
移除android.notification配置块,将channelId移到data字段中,确保FCM仅传递纯数据消息,不自动处理通知展示:
await admin.messaging().sendMulticast({ tokens: userFCMTokens, data: { title: "Notification title to display", body: "Notification body to display", channelId: "some_channel_id" // 将channelId放入data,供Flutter端调用 } });
2. 调整Flutter端代码
从data字段中获取channelId,不再依赖FCM消息的notification属性:
AwesomeNotifications().createNotification( content: NotificationContent( id: message.hashCode, channelKey: message.data['channelId'], // 从data中读取channelId title: message.data['title'], body: message.data['body'], bigPicture: message.data['imageUrl'], wakeUpScreen: true, notificationLayout: NotificationLayout.BigPicture, ), actionButtons: (message.data['actions'] as List<Map>?) ?.map( (e) => NotificationActionButton( key: e['key'], label: e['label'], ), ) .toList(), );
效果说明
修改完成后,FCM只会传递纯数据消息,不会自动生成任何通知,所有通知展示逻辑完全由你的awesome_notifications代码控制,无论应用处于前台、后台还是终止状态,都只会显示你自定义的单条通知。
内容的提问来源于stack exchange,提问作者OutdatedGuy
相关产品推荐
相关产品推荐

