3
votes

I wrote a flutter application and I can't configure the firebase cloud messaging with custom sound. I get notifications, but they come with the default sound while the app is in background. In the foreground, I use the local notification library and it works well, but I need to work in background too.

This is what I send for the cloud messaging:

{
   "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
         }
      }
   }
}

This is my working local notification config:

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',);
  }

So the local notifications library see my custom sound, but cloud messaging will play the default sound. What could be the problem?

My sound is located at: android\app\src\main\res\raw\arrive.mp3

My imports are:

    flutter_local_notifications: ^1.4.3 
    firebase_messaging: ^6.0.16

Flutter doctor:

[√] 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 Answers

4
votes

You can write background handler method for firebase messaging, then you can call showNotification method in background handler. Example code:

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