web-dev-qa-db-fra.com

Aucune notification ne retentit lors de l'envoi d'une notification à partir de Firebase dans android

J'envoie une notification Push de firebase à l'application Android. mais lorsque mon application est en arrière-plan firebase, la méthode onMessageReceived n'est pas appelée à la place. firebase envoie une notification au système pour afficher une 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 paramètres système.

ce que je peux faire pour jouer le son de notification quand un avis est reçu de Firebase.

Voici comment j'envoie des notifications de firebase à mon application lien Blogpost .

Comment ajouter Firebase dans votre Android Application

58
Hammad Tariq

La charge de notification de la notification contient une clé de son.

D'après la documentation officielle, son utilisation est:

Indique un son à jouer lorsque le périphérique reçoit une notification. Prend en charge par défaut ou le nom de fichier d'une ressource son fournie dans 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 voulez utiliser le son par défaut du périphérique, vous devez utiliser: "sound": "default".

Consultez ce lien pour connaître toutes les clés possibles dans les données utiles: https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support

Pour ceux qui ne connaissent pas firebase, les notifications sont gérées 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 tapant sur la notification ouvre le lanceur d'applications par défaut. Cela inclut les messages contenant à la fois des notifications et des données utiles. Dans ces cas, la notification est envoyée à la barre d'état système du périphérique et la charge utile de données est livrée dans les extras de l'intention de votre activité de lanceur.

85
Isj

adavaced options sélectionnez les options avancées lorsque Rédigez un message et choisissez le son activé choose activated

c'est ma solution

22
KongJing

Essaye ça

{
    "to" : "DEVICE-TOKEN",

    "notification" : {
      "body"  : "NOTIFICATION BODY",
      "title" : "NOTIFICATION TITILE",
      "sound" : "default"
    }
  }

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

14
Sameer

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

Depuis le Firebase docs

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

Pour le type de notification , FCM affiche automatiquement le message aux périphériques de l'utilisateur final au nom 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 sur votre client. nom de l'application. Utilisez des données lorsque vous souhaitez que votre application gère l'affichage ou le processus. les messages sur votre application client Android, ou si vous souhaitez envoyer des messages à des périphériques iOS en cas de connexion directe par FCM.

Plus bas le docs

Le comportement de l'application lors de la réception de messages contenant à la fois des données utiles de notification et des données utiles dépend du fait que l'application soit en arrière-plan ou en avant-plan, essentiellement si actif au moment de la réception.
En arrière-plan , les applications reçoivent le contenu de notification dans la barre de notification et ne traitent le contenu de données que lorsque l'utilisateur appuie sur le bouton de la souris. notification.
Lorsque vous êtes au premier plan , votre application reçoit un objet de message avec les deux charges utiles disponibles.

Si vous utilisez la console firebase pour envoyer des notifications, le contenu 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 de notification. Ainsi, votre application est toujours notifiée lors de la réception d'une nouvelle notification et peut gérer la charge de notification.

Si vous voulez jouer le son de notification quand l'application est en arrière-plan en utilisant la méthode conventionnelle, vous devez ajouter le paramètre son à la charge de notification.

9
Renjith

Avec HTTP v1 API, 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"
       }
    }
  }
}
5
Andrey

fait comme ça

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    //codes..,.,,

    Uri sound= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        builder.setSound(sound);

}
3
AAA

essaye ça....

  public  void buildPushNotification(Context ctx, String 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 le dit, mais vous pouvez utiliser une console Firebase.

1
chry

Je suis capable de jouer le son de notification même si je l’envoie depuis la console firebase. Pour ce faire, il vous suffit d’ajouter la clé "son" avec la valeur "par défaut" à l’avance.

0
Saeed Sharman