2016-08-09 36 views
3

Wenn Benutzer eine Firebase Benachrichtigung in Android klickt, können Sie die folgenden TastenWie kann ich den Firebase-Benachrichtigungskörper erhalten, wenn der Benutzer klickt?

  • google.sent_time (lang)
  • from (string)
  • google.message_id (String)
  • collapse_key (String) erhalten

mit dem folgenden Code:

if (getIntent().getExtras() != null) { 
      for (String key : getIntent().getExtras().keySet()) { 
       String value = getIntent().getExtras().getString(key); 
       Log.d(TAG, "Key: " + key + " Value: " + value); 
      } 
     } 

Ich brauche aber die Body aus der Nachricht zu erhalten. Ist es möglich?

Antwort

2

Nicht, wenn die App im Hintergrund ist, die in der Benachrichtigung Nutzlast definierte Werte sind wirklich für die Zwecke der eine Benachrichtigung zu erzeugen. Wenn Sie auf die Werte zugreifen möchten, die in der Benachrichtigungsnutzlast der Nachricht definiert sind, sollten Sie sie in der Datennutzlast wiederholen. Wenn der Benutzer auf die Benachrichtigung tippt, können Sie sie von den Extras der Absicht abrufen. Etwas wie:

{ 
    "to": "/topics/sometopic", 
    "notification": { 
    "title": "some title", 
    "body": "some body" 
    }, 
    "data": { 
    "noti_title": "some title", 
    "noti_body": "some body", 
    "other_key": "other value" 
    } 
} 
+0

Tatsächlich, das Umschalten der gesamten Anwendung in eine 'Daten' basierte Nachricht löste das Problem. Die einzige Problemumgehung, die ich tun musste, war, den Anwendungsstatus beim Empfangen der Benachrichtigung zu behandeln. – Machado

+1

Das ist eine faire Wahl, denn die meisten Kontrolldaten sind der richtige Weg –

-1

Sie die Benachrichtigung manuell handhaben müssen, folgen Sie einfach this guide.

die Benachrichtigung Körper zu erhalten, remoteMessage.getNotification().getBody() im onMessageReceived Methode aufrufen.

Und dann, wenn die Benachrichtigung zeigt (siehe this file), fügen Sie den Körper als Extra zu der Absicht.

intent.putExtra("body", notificationBody); 
intent.putExtra("title", notificationTitle); 

this helps :)

+0

Es funktioniert nur, wenn der Benutzer die Anwendung geöffnet hat, bis er die Benachrichtigung erhält. Wenn er die Benachrichtigung in der Benachrichtigungsleiste erhält und darauf klickt, wird der Text nicht angezeigt. – Machado

+1

sieht aus, als würden Sie die Benachrichtigung über die Konsole senden. [diese Antwort] (http://stackoverflow.com/a/37845174/5292961) könnte die Antwort auf Ihre Frage sein. :) – Wilik