flutter - 如何为flutter应用程序添加android通知 channel ID以在应用程序处于后台时修复通知

标签 flutter firebase-cloud-messaging android-notifications

在我的 flutter 应用程序中,onResume 和 onLunch 功能在 android 平台上不起作用,而它们在 IOS 上运行良好,
我在控制台上收到以下消息,而不是在这些函数中打印字符串:

“W/FirebaseMessaging(24847):AndroidManifest 中缺少默认通知 channel 元数据。将使用默认值。”

onMessage 功能工作正常,问题是应用程序在后台时

我的猜测是它与应该添加到 android manifest 中的 android 通知 channel id 有关

当我通过将以下代码添加到 AndroidManifest 将其添加到 list 时,消息更改为:
(我在 values 中添加了一个 strings.xml 文件并在那里定义了“default_notification_channel_id”。)

“应用程序尚未创建 AndroidManifest.xml 中设置的通知 channel 。将使用默认值。”

<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id"/>

在我的控制台中,我应该收到我打印的 onResume 和 onLunch 字符串,但我收到以下消息:

“W/FirebaseMessaging(24847):AndroidManifest 中缺少默认通知 channel 元数据。将使用默认值。”

“应用程序尚未创建 AndroidManifest.xml 中设置的通知 channel 。将使用默认值。”
<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id"/>

最佳答案

你应该先创建一个通知 channel ,插件:flutter_local_notifications可以创建和删除通知 channel 。

首先,初始化插件:

Future<void> initializeLocalNotifications() async {
  FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
  FlutterLocalNotificationsPlugin();
  // app_icon needs to be a added as a drawable resource to the
  // Android head project
  var initializationSettingsAndroid = AndroidInitializationSettings('app_icon');
  var initializationSettingsIOS = IOSInitializationSettings(
      onDidReceiveLocalNotification: onDidReceiveLocalNotification);
  var initializationSettings = InitializationSettings(
      initializationSettingsAndroid, initializationSettingsIOS);
  await flutterLocalNotificationsPlugin.initialize(initializationSettings,
      onSelectNotification: selectNotification);
}

其次,使用这个插件创建通知 channel :
Future<void> _createNotificationChannel(String id, String name,
    String description) async {
  final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
  var androidNotificationChannel = AndroidNotificationChannel(
    id,
    name,
    description,
  );
  await flutterLocalNotificationsPlugin
      .resolvePlatformSpecificImplementation<
      AndroidFlutterLocalNotificationsPlugin>()
      ?.createNotificationChannel(androidNotificationChannel);
}

现在你有两个选择:
  • 使用您已在 AndroidManifest.xml 中定义的默认 ID 创建一个 channel
  • 选择您自己的 channel ID,并通过将 channel ID 嵌入到您的 FCM 通知消息中将每个通知发送到特定 channel 。为此,请添加 channel_idnotification 下标记您的通知标签下 android标签。

  • 以下是来自 Firebase Functions 的带有自定义通知 channel ID 的示例通知消息:
        'notification': {
            'title': your_title,
            'body': your_body,
        },
        'android': {
            'notification': {
                'channel_id': your_channel_id,
            },
        },
    

    关于flutter - 如何为flutter应用程序添加android通知 channel ID以在应用程序处于后台时修复通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57783319/

    相关文章:

    flutter - Flutter-小部件的状态未更改

    ios - setInt 和 getInt 值改变 Flutter

    android - 为什么我的 flutter 应用程序启动器图标是一个圆圈?我可以用方形图标来代替这个吗?

    android - 上游消息回调 Firebase Android 应用程序

    java - 从通知实例化 Activity 启动 Activity ,即使已经存在

    android - 如何在“请勿打扰”设置中查找 "Priority app notifications"下允许哪些应用程序?

    flutter - 在标签栏中添加垂直线作为分隔线作为分隔线

    firebase - iOS 离线时的 FCM 行为

    firebase - FCM 获取 MismatchSenderId

    android - 如何获取信息注册。状态栏中的通知处于 Activity 状态