如何使用 FCM 和 awesome_notifications 仅显示一个通知

How to show only one notification with FCM and awesome_notifications

我正在使用 Firebase Messaging 从云端向用户发送通知,但我希望某些通知在通知中具有操作按钮选项(文本输入、按钮选择),因此我使用 awesome_notifications.

我已将程序包设置为 运行 每当收到通知时使用此方法:

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  await AwesomeNotifications().createNotification(
    content: NotificationContent(
      id: 1,
      channelKey: 'basic_channel',
      title: message.notification.title,
      body: message.notification.body,
      createdSource: NotificationSource.Firebase,
      notificationLayout: NotificationLayout.BigText,
    ),
    actionButtons: <NotificationActionButton>[
      NotificationActionButton(
        key: 'short_text',
        label: 'Answer',
        buttonType: ActionButtonType.InputField,
        autoCancel: true,
      ),
    ],
  );
}

这会正确生成具有正确标题、body、布局和文本输入选项的通知,但也会显示直接从 FCM 收到的通知。我只想显示我用 awesome_notifications 生成的通知,但我似乎找不到执行此操作的方法。感谢您的任何输入。

Firebase Cloud Messaging(FCM) 有两种类型的消息:

  • FCM 代表客户端应用程序自动向最终用户设备显示消息的通知消息。
  • 您的应用负责处理数据消息的数据消息。

About FCM messages

您应该使用数据消息,这样您的应用程序就不会显示您当前使用的通知消息类型附带的自动通知。

因此,如果您的云功能包含以下代码以发送通知消息:

const message = {
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
};
admin.messaging().send(message);

您可以将其更新为:

const message ={
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "title" : "Portugal vs. Denmark",
      "body" : "great match!"
    }
  }
};
admin.messaging().send(message);