如何为flutter应用程序添加android通知通道ID以在后台运行时修复通知

时间:2019-09-04 07:18:21

标签: flutter firebase-cloud-messaging android-notifications

在我的flutter应用中,onResume和onLunch函数在android平台上不起作用,尽管它们在IOS上可以正常工作, 我在控制台上收到以下消息,而不是在那些函数中打印字符串:

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

onMessage函数工作正常,问题在于应用程序在后台运行

我的猜测是,它与应在android清单中添加的android通知通道ID有关

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

“该应用尚未创建在AndroidManifest.xml中设置的通知频道。将使用默认值。”

<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 个答案:

答案 0 :(得分:4)

您应该首先创建一个通知通道,插件: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

  2. 中已定义的默认ID创建频道
  3. 选择您自己的频道ID,然后通过将频道ID嵌入到FCM通知消息中来将每个通知发送到特定频道。为此,请在channel_id标签下notification标签下的通知中添加android标签。

这是Firebase Functions中带有自定义通知通道ID的示例通知消息:

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

答案 1 :(得分:0)

您创建了Left(int)吗?

  

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

未在通知的有效负载中设置channel_id时会发出此警告