Pas de notification sonore lors de l’envoi d’une notification à partir de Firebase dans Android

J’envoie une notification push de Firebase à mon application Android. mais lorsque mon application est en arrière-plan, la méthode onMessageReceived de firebase n’est pas appelée à la place, mais firebase envoie une notification au système pour afficher la notification dans la barre d’état système. notification apparaît dans la barre d’état système mais pas de son pour la notification, même si j’ai autorisé le son de notification pour mon application dans les parameters du système.

ce que je peux faire pour jouer le son de notification lorsque la notification reçue de firebase.

Voici comment j’envoie une notification de firebase à mon lien Blogpost d’ application.

Comment append une base de feu dans votre application Android

Dans la charge utile de notification de la notification, il existe une clé audio.

De la documentation officielle, son utilisation est la suivante:

Indique un son à jouer lorsque l’appareil reçoit une notification. Prend en charge le nom par défaut ou le nom de fichier d’une ressource audio intégrée à l’application. Les fichiers audio doivent résider dans / res / raw /.

Par exemple:

{ "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", "notification" : { "body" : "great match!", "title" : "Portugal vs. Denmark", "icon" : "myicon", "sound" : "mySound" } } 

Si vous souhaitez utiliser le son par défaut du périphérique, vous devez utiliser: "sound": "default" .

Voir ce lien pour toutes les clés possibles dans les charges utiles: https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support

Pour ceux qui ne le savent pas, firebase gère les notifications différemment lorsque l’application est en arrière-plan. Dans ce cas, la fonction onMessageReceived n’est pas appelée.

Lorsque votre application est en arrière-plan, Android dirige les messages de notification vers la barre d’état système. Un utilisateur touche la notification pour ouvrir le lanceur d’applications par défaut. Cela inclut les messages contenant à la fois une notification et des données utiles. Dans ces cas, la notification est transmise à la barre d’état système du périphérique et la charge de données est fournie dans les extras du but de votre activité de lancement.

options ajoutées sélectionner des options avancées lors de la rédaction d’un message et choisir le son activé choisissez activé

c’est ma solution

La méthode onMessageReceived est déclenchée uniquement lorsque l’application est au premier plan ou que la charge utile de notification contient uniquement le type de données.

À partir des documents Firebase

Pour la messagerie en aval, FCM fournit deux types de données utiles: la notification et les données .

Pour le type de notification , FCM affiche automatiquement le message aux appareils d’utilisateur final pour le compte de l’application cliente. Les notifications ont un ensemble prédéfini de clés visibles par l’utilisateur.
Pour le type de données , l’application client est responsable du traitement des messages de données. Les messages de données ont uniquement des paires clé-valeur personnalisées.

Utilisez les notifications lorsque vous souhaitez que FCM gère l’ affichage d’une notification au nom de votre application cliente. Utilisez des messages de données lorsque vous souhaitez que votre application gère l’affichage ou traite les messages sur votre application client Android ou si vous souhaitez envoyer des messages aux terminaux iOS en cas de connexion FCM directe.

Plus bas les docs

Le comportement des applications lors de la réception de messages contenant à la fois des charges de notification et de données dépend du fait que l’application se trouve en arrière-plan ou au premier plan, qu’elle soit active ou non au moment de la réception.
En arrière-plan , les applications reçoivent la charge utile de notification dans la zone de notification et ne traitent que la charge utile de données lorsque l’utilisateur appuie sur la notification.
Au premier plan , votre application reçoit un object de message avec les deux données utiles disponibles.

Si vous utilisez la console firebase pour envoyer des notifications, la charge utile contiendra toujours le type de notification. Vous devez utiliser l’API Firebase pour envoyer la notification avec uniquement le type de données dans la charge utile de notification. De cette façon, votre application est toujours avertie lorsqu’une nouvelle notification est reçue et que l’application peut gérer la charge de notification.

Si vous souhaitez lire le son de notification lorsque l’application est en arrière-plan en utilisant la méthode conventionnelle, vous devez append le paramètre audio à la charge utile de notification.

Vous pouvez cela

 { "to" : "DEVICE-TOKEN", "notification" : { "body" : "NOTIFICATION BODY", "title" : "NOTIFICATION TITILE", "sound" : "default" } } 

@note pour le son de notification personnalisé: -> "sound" : "MyCustomeSound.wav"

fait comme ça

 @Override public void onMessageReceived(RemoteMessage remoteMessage) { //codes..,.,, Uri sound= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); builder.setSound(sound); } 

Je suis capable de lire le son de notification même si je l’envoie depuis la console firebase. Pour ce faire, il vous suffit d’append la clé “sound” avec la valeur “default” à l’avance.

essaye ça….

  public void buildPushNotification(Context ctx, Ssortingng content, int icon, CharSequence text, boolean silent) { Intent intent = new Intent(ctx, Activity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 1410, intent, PendingIntent.FLAG_ONE_SHOT); Bitmap bm = BitmapFactory.decodeResource(ctx.getResources(), //large drawable); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(ctx) .setSmallIcon(icon) .setLargeIcon(bm) .setContentTitle(content) .setContentText(text) .setAutoCancel(true) .setContentIntent(pendingIntent); if(!silent) notificationBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(1410, notificationBuilder.build()); } 

et dans onMessageReceived, appelez-le

  @Override public void onMessageReceived(RemoteMessage remoteMessage) { Log.d("Msg", "Message received [" + remoteMessage.getNotification().getBody() + "]"); buildPushNotification(/*your param*/); } 

ou suivez KongJing , est également correct comme il dit, mais vous pouvez utiliser une console Firebase.

Avec l’API HTTP v1, c’est différent

Documentation

Exemple:

 { "message":{ "topic":"news", "notification":{ "body":"Very good news", "title":"Good news" }, "android":{ "notification":{ "body":"Very good news", "title":"Good news", "sound":"default" } } } }