web-dev-qa-db-fra.com

Comment récupérer le message de notification intent.getExtras () lorsque l'application est en arrière-plan FCM

J'utilise FCM pour une notification simple 

Lorsque l'application est au premier plan, tout fonctionne correctement. Je reçois une notification plus le message de données dans la méthode onMessageReceived.

Mais lorsque l'application est en arrière-plan, je reçois une notification dans la barre d'état système. Et lorsque je clique sur le contrôle, il passe à l'activité principale. Et quand j'analyse intent.getExtras();, je n'obtiens que ces données de clé - google.sent_time, from, google.message_id, collapse_key.

Comment obtenir le titre du message de notification et le message visible dans la zone de notification à partir de intent.getExtras()?

J'utilise la console FCM pour envoyer des notifications. Je n'ai pas mon serveur dédié pour le faire.

Code de réception du message:

final Bundle extras = intent.getExtras(); 
final Set<String> keySet = extras.keySet(); 
final Iterator<String> iterator = keySet.iterator(); 
while (iterator.hasNext()) {     
    final String key = iterator.next(); 
    final Object o = extras.get(key); 
    System.out.println(key + ":" + o); 
} 
10
mayur rahatekar

Comme indiqué dans Gestion des messages pour les documents FCM Android , si la charge utile que vous avez envoyée contient à la fois des notifications et des données, elles seront traitées séparément. La partie notification sera traitée par la zone de notification, tandis que la partie données figurera dans les extras de l’intention.

D’après les informations dont nous disposons, il n’existe aucun moyen d’obtenir la charge de notification lorsque l’application est en arrière-plan (toujours gérée par la barre de notification). Toutefois, vous pouvez ajouter des paires clé-valeur personnalisées à votre charge de données, comme suit:

{
"data": {
      "notification_title": "title here",
      "notification_message": "message here"
     }
}

Bien sûr, vous devrez vous assurer que la valeur des données pour notification_title et notification_message est identique à celle que vous avez définie dans la charge de notification. Ensuite, récupérez-le dans les extras d’intention comme d’habitude.

12
AL.

La notification Firebase se comportera comme un message de données lorsque votre application est en arrière-plan ou est supprimée. Dans ces scénarios, si vous souhaitez récupérer votre message de notification, vous devez le définir dans la paire Valeur/clé sous 

Option avancée de la console FCM

 enter image description here

puis récupérez ce message en utilisant cette clé dans votre activité qui sera ouverte en tabulant la notification.

 if (getIntent().getExtras() != null) {
        Object value ;
        for (String key : getIntent().getExtras().keySet()) {
            if(key.equals("Message Key")) {
                 value = getIntent().getExtras().get(key); // value will represend your message body... Enjoy It
                 Log.d("NotificationTag" , key+"____" + value);
                }
          }
   } 
3
Sheharyar Ejaz

Remplacez simplement la méthode handleIntent () de FirebaseMessagingService .class sera appelée en mode avant-plan et en arrière-plan. Vous pouvez ici obtenir et analyser la clé de notification et les données utiles 

public void handleIntent(Intent intent)
    {
    String title = bundle.getString("gcm.notification.title");
     String body = bundle.getString("gcm.notification.body");
    }

Remarque: cela fonctionnera pour le service de jeu 11

1
Bhoopendra Kaurav