Функция onBackgroundMessageHandler не работает во флаттере - PullRequest
0 голосов
/ 16 июня 2020

У меня есть облачная функция, развернутая в 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!!",
      },
    });

Если приложение работает в фоновом режиме или завершено, onBackgroundMessage FCM должно запускать и запускать функцию обратного вызова. Функция выглядит так:

Q. Почему эта функция даже не работает, когда уведомление получено в фоновом режиме?

Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) async {
  await _showFlutterLocalNotification(
    "HEY!!",
    "onBackgroundMessage ran myBackgroundMessageHandler()",
  );

  return Future<void>.value();
}

ниже - _showFlutterLocalNotification () , вызываемый внутри вышеуказанной функции myBackgroudMessageHandler

_showFlutterLocalNotification(String title, String message) async {
  var androidPlatformChannelSpecifics = AndroidNotificationDetails(
    "DUE_DATE_REMINDER",
    "Due date reminder notification",
    "Notification channel for task due date reminder.",
  );

  var iosChannelSpecifics = IOSNotificationDetails();

  var platformChannelSpecifics = NotificationDetails(
    androidPlatformChannelSpecifics,
    iosChannelSpecifics,
  );

  await CustomNotificationHandler().flutterLocalNotificationsPlugin.show(
        0,
        title,
        message,
        platformChannelSpecifics,
      );
}

а это CustomNotificationHandler.dart class:

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

Это мой Application.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"
/>

Это вывод в консоль при отправке уведомления облачная функция, когда приложение находится в фоновом режиме!

Console output

Провели несколько экспериментов:

  1. Пытался вызвать print внутри функции myBackgroundMessageHandler (), но ничего не напечатал в консоли!
  2. Попытался инициализировать flutterLocalNotificationPlugin внутри _showFlutterLocalNotification ()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...