Как установить пользовательское звуковое уведомление на фоне при флаттере? - PullRequest
2 голосов
/ 27 мая 2020

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

Это то, что я отправляю для обмена сообщениями в облаке:

{
   "to":"<firebase_token>",
   "notification":{
      "sound":"arrive",
      "title":"My Title",
      "body":"My body"
   },
   "data":{
      "click_action":"FLUTTER_NOTIFICATION_CLICK",
      "status":"done",
      "screen":"screenA",
      "message":"ACTION"
   },
   "apns":{
      "headers":{
         "apns-priority":"5",
         "apns-push-type":"background"
      },
      "payload":{
         "aps":{
            "content-available":1
         }
      }
   }
}

Это это моя рабочая локальная конфигурация уведомлений:

void showNotification({
    String title,
    String body,
  }) {
    var androidPlatformChannelSpecifics = AndroidNotificationDetails(
      'your channel id',
      'your channel name',
      'your channel description',
      importance: Importance.Max,
      priority: Priority.Max,
      ticker: 'ticker',
      playSound: true,
      sound: RawResourceAndroidNotificationSound('arrive')
    );

    var iOSPlatformChannelSpecifics = IOSNotificationDetails();

    var platformChannelSpecifics = NotificationDetails(
      androidPlatformChannelSpecifics,
      iOSPlatformChannelSpecifics,
    );
    notifications.show(0, title, body, platformChannelSpecifics,
        payload: 'Custom_Sound',);
  }

Таким образом, локальная библиотека уведомлений видит мой собственный звук, но облачные сообщения будут воспроизводить звук по умолчанию. В чем может быть проблема?

Мой звук находится по адресу: android \ app \ src \ main \ res \ raw \ прибыть.mp3

Мой импорт:

    flutter_local_notifications: ^1.4.3 
    firebase_messaging: ^6.0.16

Флаттер-доктор:

[√] Flutter (Channel stable, v1.12.13+hotfix.9, on Microsoft Windows [Version 10.0.18362.836], locale hu-HU)
    • Flutter version 1.12.13+hotfix.9 at C:\flutter src\flutter
    • Framework revision f139b11009 (8 weeks ago), 2020-03-30 13:57:30 -0700
    • Engine revision af51afceb8
    • Dart version 2.7.2

 
[√] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at C:\Users\koros\AppData\Local\Android\sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-29, build-tools 28.0.3
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
    • All Android licenses accepted.

[√] Android Studio (version 3.4)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin version 35.3.1
    • Dart plugin version 183.6270
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)

[√] VS Code (version 1.45.1)
    • VS Code at C:\Users\koros\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.10.2

[√] Connected device (1 available)
    • SM A520F • 52003aa8f4ea64d5 • android-arm64 • Android 8.0.0 (API 26) (emulator)

• No issues found!

1 Ответ

1 голос
/ 27 мая 2020

Вы можете написать метод фонового обработчика для обмена сообщениями firebase, затем вы можете вызвать метод showNotification в фоновом обработчике. Пример кода:

Future<dynamic> onBackgroundMessageHandler(Map<String, dynamic> message) async {

  if (message['data'] != null) {
    final data = message['data'];
    final title = data['title'];
    final body = data['message'];
    showNotification(title, body);
  } 

  return Future<void>.value();
}


FirebaseMessaging _firebaseMessaging = FirebaseMessaging();

_firebaseMessaging.configure(onBackgroundMessage: Platform.isIOS ? null : onBackgroundMessageHandler);
...