Flutter - FCM: как сохранить фоновое сообщение в SQLite - PullRequest
0 голосов
/ 09 апреля 2020

Я создаю систему уведомлений для своего мобильного приложения, идея состоит в том, чтобы хранить как передний план, так и фоновые сообщения, полученные из сообщения Firebase Cloud в SQLite. Я следовал указаниям , чтобы настроить мой проект.

Вот мой код:

void initState() {
    super.initState();
    service = MySQLService();

    _firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        print("onMessage: $message");
        service.insertItem(Item.fromMessage(message)); // It's working, here.
      },
      onBackgroundMessage: myBackgroundMessageHandler,
      onLaunch: (Map<String, dynamic> message) async {
        print("onLaunch: $message");
      },
      onResume: (Map<String, dynamic> message) async {
        print("onResume: $message");
      },
    );

    _firebaseMessaging.requestNotificationPermissions(
        const IosNotificationSettings(
            sound: true, badge: true, alert: true, provisional: true));
    _firebaseMessaging.onIosSettingsRegistered
        .listen((IosNotificationSettings settings) {
      print("Settings registered: $settings");
    });
    _firebaseMessaging.getToken().then((String token) {
      assert(token != null);
      print("Push Messaging token: $token");
    });
}

И код для обработки фонового сообщения:

Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) async {
  print("onBackground: $message");
  var service = MySQLService();
  await service.insertItem(Item.fromMessage(message)); // It's not working, here.
  return Future<void>.value();
}

На данный момент мое приложение может: получать сообщение переднего плана и сохранять его в SQLite (вызывая service.insertItem ), но по какой-то причине фоновое сообщение не сохраняется в SQLite, даже если оно отображается в списке уведомлений устройства.

enter image description here

ОБНОВЛЕНИЕ: здесь код для вставки сообщения

  Future<void> insertItem(Item notification) async {
    final Database db = await MyDatabase.getDatabase();
    await db.insert('notification', notification.toMap(),
        conflictAlgorithm: ConflictAlgorithm.replace);
    return Future<void>.value();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...