如何为Flutter应用程序添加Android通知渠道ID以修复后台应用程序的通知。

14
在我的flutter应用程序中,onResume和onLunch函数在android平台上不起作用,而在IOS上运行良好, 我收到以下消息而不是在这些函数中打印的字符串:
"W/FirebaseMessaging(24847): Missing Default Notification Channel metadata in AndroidManifest. Default value will be used."
onMessage函数正常工作,问题是当应用程序处于后台时。
我猜测它与android通知通道id有关,该id应添加到android清单中。
当我使用以下代码将其添加到AndroidManifest时,消息更改为: (我在值中添加了一个strings.xml文件,并在其中定义了"default_notification_channel_id"。)
"Notification Channel set in AndroidManifest.xml has not been created by the app. Default value will be used."
<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 中缺少默认通知渠道元数据。将使用默认值。"

"应用程序未创建AndroidManifest.xml中设置的通知渠道。将使用默认值。"

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

14

在使用之前,你需要先创建一个通知渠道。可以使用插件:flutter_local_notifications来创建和删除通知渠道。

其次,初始化该插件:

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);
}

其次,使用该插件创建通知渠道:

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);
}

现在您有两个选项:

  1. 使用您在AndroidManifest.xml中已定义的默认id创建通道。

  2. 选择自己的通道id,并通过将通道id嵌入您的FCM通知消息,将每个通知发送到特定的通道。要这样做,请在notification标记下,在android标记下,在您的通知下添加channel_id标记。

以下是带有自定义通知通道id的Firebase Functions示例通知消息:

    'notification': {
        'title': your_title,
        'body': your_body,
    },
    'android': {
        'notification': {
            'channel_id': your_channel_id,
        },
    },

1
创建一个具有在 AndroidManifest.xml 中预定义的默认 ID 的通道 => 如何实现? - Ekta Padaliya
您可以按照此答案中的示例定义默认通知渠道。 - Ali Hussein Al-Issa

0

你创建了default_notification_channel_id吗?

"W/FirebaseMessaging(24847): AndroidManifest中缺少默认通知渠道元数据。将使用默认值。"

当您在通知的负载中未设置channel_id时,会出现此警告。


如果您指的是Firebase控制台中的通道ID,是的,我尝试使用通道ID发送通知,但仍然无法正常工作。 - Mahmood Bkh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接