Фоновые сообщения Flutter Firebase

# #android #firebase #flutter #dart #firebase-cloud-messaging

Вопрос:

Я хочу использовать onBackgroundMessage, поэтому моя идея заключается в том, что если уведомление получено, когда приложение свернуто или убито, я пытаюсь воспроизвести какой-либо аудиофайл из актива с помощью пакета AudioPlayer, но при запуске flutter я получил такую ошибку :

E/flutter (31608): [ОШИБКА:flutter/lib/ui/ui_dart_state.cc(199)] Необработанное исключение: Оператор проверки Null, используемый для нулевого значения E/flutter (31608): #0 Метод канала FirebaseMessaging.registerBackgroundMessageHandler

Однако приложение все еще работает при запуске flutter, хотя появляется ошибка выше. Когда я пытаюсь отправить уведомление, приложение получило уведомление в заголовке, но я получил еще одно подобное сообщение

Фоновое сообщение не может быть обработано в Dart, так как обработчик onBackgroundMessage не зарегистрирован. Отсутствуют метаданные канала уведомлений по умолчанию в AndroidManifest. Будет использоваться значение по умолчанию.

Я никогда ничего не меняю в папке Android или папке ios. пожалуйста, помогите мне решить эту проблему

Это мой код дротика :

   FirebaseMessaging messaging = FirebaseMessaging.instance;
  AudioCache audioCache = AudioCache();
  AudioPlayer audioPlayer = AudioPlayer();

  Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {
    await Firebase.initializeApp();
    print("Background message service");
    audioPlayer = await audioCache.play('dangeronehour.mp3');
  }

  void initMessaging() async {
    NotificationSettings settings = await messaging.requestPermission(
      alert: true,
      announcement: false,
      badge: true,
      carPlay: false,
      criticalAlert: false,
      provisional: false,
      sound: true,
    );
    messaging.getToken().then((value) => print(value));
    print('${settings.authorizationStatus}');
  }

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    initMessaging();
    FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);

    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      print('Message in the foreground!');
      print('Message data: ${message.data}');
    });

    FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) async {
      print('App opened');
      audioPlayer = await audioCache.play('dangeronehour.mp3');
    });
  }
 

Пакеты Firebase, которые я использовал

 dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^1.0.2
  firebase_core: ^1.0.3
  firebase_messaging: ^9.1.1
  flutter_local_notifications:
  audioplayers:
 

Трепещущий Доктор

 Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel master, 2.1.0-13.0.pre.586, on Mac OS X 10.15.2 19C57 darwin-x64, locale en)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[!] Xcode - develop for iOS and macOS
    ✗ Xcode 11.6.0 out of date (12.0.1 is recommended).
      Download the latest version or update via the Mac App Store.
    ! CocoaPods 1.8.4 out of date (1.10.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.1)
[✓] Connected device (2 available)
 

Версия флаттера

 Flutter 2.1.0-13.0.pre.586 • channel master • https://github.com/flutter/flutter.git
Framework • revision fbf3c4e41c (26 hours ago) • 2021-04-12 17:42:25 -0700
Engine • revision 8863afff16
Tools • Dart 2.13.0 (build 2.13.0-222.0.dev)
 

Ответ №1:

Положи это в AndroidManifest.xml это вы найдете в папке Android:

    <intent-filter>
         <action android:name="FLUTTER_NOTIFICATION_CLICK" />
         <category android:name="android.intent.category.DEFAULT" />
   </intent-filter>
 

Вы можете поместить это в конце действия, но перед закрытием действия

Комментарии:

1. Я последовал вашим инструкциям, теперь у меня есть сообщение : W/FLTFireMsgService( 4915): Фоновое сообщение не может быть обработано в Dart, так как обработчик onBackgroundMessage не зарегистрирован. W/FirebaseMessaging( 4915): Канал уведомлений установлен в AndroidManifest.xml не был создан приложением. Будет использоваться значение по умолчанию. когда я получил уведомление, я нажимаю уведомление в верхнем заголовке, и приложение не появляется, я также получаю сообщение следующего содержания : E/CloudMessagingReceiver( 4915): Уведомление в ожидании намерения отменено

2. Вы разрабатываете для iOS или для Android?

3. Я разрабатываю для Android