Flutter onBackgroundMessageHandler函数在颤振模式下不工作

Flutter onBackgroundMessageHandler函数在颤振模式下不工作,flutter,dart,firebase-cloud-messaging,Flutter,Dart,Firebase Cloud Messaging,我在firebase中部署了一个云函数,每当文档发生更改时就会触发该函数,然后该云函数将向更改文档的用户设备发送通知,这就是有效负载: const payload = (admin.messaging.MessagingPayload = { notification: { title: "NOTIFICATION FROM CLOUD", body: "Sent from triggered cloud function!!", cl

我在firebase中部署了一个云函数,每当文档发生更改时就会触发该函数,然后该云函数将向更改文档的用户设备发送通知,这就是有效负载:

const payload = (admin.messaging.MessagingPayload = {
      notification: {
        title: "NOTIFICATION FROM CLOUD",
        body: "Sent from triggered cloud function!!",
        click_action: "FLUTTER_NOTIFICATION_CLICK",
      },
      data: {
        title: "DATA FROM CLOUD",
        body: "Sent from triggered cloud function!!",
      },
    });
如果应用程序处于后台或已终止,则FCM的onBackgroundMessage应触发并运行回调函数。功能如下:

Q.为什么在后台收到通知时此功能甚至没有运行?

这是CustomNotificationHandler.dart类:

class CustomNotificationHandler {
  final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
      FlutterLocalNotificationsPlugin();

  Future initializeHandler() async {
    var initializationSettingsAndroid = AndroidInitializationSettings(
      "app_icon",
    );
    var initializationSettingsIOS = IOSInitializationSettings(
      onDidReceiveLocalNotification: onDidReceiveLocalNotification,
    );
    var initializationSettings = InitializationSettings(
      initializationSettingsAndroid,
      initializationSettingsIOS,
    );

    await flutterLocalNotificationsPlugin.initialize(
      initializationSettings,
      onSelectNotification: onSelectNotification,
    );
  }

  Future onDidReceiveLocalNotification(
      int id, String title, String body, String payload) async {
    print("RAN onDidReceiveLocalNotification for IOS");
  }

  Future onSelectNotification(String payload) async {
    if (payload != null) {
      debugPrint("Notification payload: $payload");
    }

    debugPrint("OX: DONE WITH PAYLOAD");
  }
}
这是我的应用程序。kt用于注册FirebaseCloudMessaging插件,使其在后台运行

class Application : FlutterApplication(), PluginRegistry.PluginRegistrantCallback {
    override fun onCreate() {
        super.onCreate()
        FlutterFirebaseMessagingService.setPluginRegistrant(this)
    }

    override fun registerWith(registry: PluginRegistry?) {
        FirebaseMessagingPlugin.registerWith(registry?.
            registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"))
    }
}
这是AndroidManifest.xml中的相关代码块

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

这是当应用程序处于后台时向云函数发送通知时的控制台输出

class Application : FlutterApplication(), PluginRegistry.PluginRegistrantCallback {
    override fun onCreate() {
        super.onCreate()
        FlutterFirebaseMessagingService.setPluginRegistrant(this)
    }

    override fun registerWith(registry: PluginRegistry?) {
        FirebaseMessagingPlugin.registerWith(registry?.
            registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"))
    }
}

我们做了一些实验:

  • 尝试在myBackgroundMessageHandler()函数中调用print,但在控制台中没有打印任何内容
  • 试图在_showFlatterLocalNotification()中初始化FlatterLocalNotificationPlugin
  • <meta-data 
        android:name="com.google.firebase.messaging.default_notification_channel_id" 
        android:value="DUE_DATE_REMINDER"
    />