2016-06-03 5 views
1

GCM funktionierte gut, aber jetzt fcm keine Benachrichtigung erhalten, wenn es vom Server gesendet wurde, funktioniert es nur, wenn ich von Firebase-Konsole senden Ich bin fast sicher, dass das Problem in Array-Form ist haben in App:FCM Konsole Push funktioniert aber Server Push nicht

 String messageBody = remoteMessage.getNotification().getBody(); 

und in php:

 $fields = array(
     'registration_ids' => $this->devices, 
     'data'    => array("message" => $message), 
    ); 

was denken Sie bitte

+0

ist die FCM-App die gleiche Projekt/Sender-ID wie die GCM-Version Ihrer App? Sie können entweder das alte Projekt von der Firebase-Konsole in ein "Firebase-Projekt" migrieren oder die FCM-App für einen sekundären Absender über FirebaseInstanceId.getInstance() registrieren. GetToken ("sender2", "FCM") Payload der Nachricht ist in remoteMessage.getData() nicht remoteMessage.getNotification(). getBody() verfügbar. Das zweite Feld ist ein für die "Benachrichtigung" Payload. –

+0

ja es ist kein Absender-ID-Problem, so sollte es getData() oder getData ("Nachricht") sein? Mit GCM habe ich getString ("message") verwendet und –

+0

getData() gibt ein Map -Objekt zurück, wo Sie auf die Schlüssel/Werte zugreifen können, die Sie in der Datennutzlast gesetzt haben. In Ihrem Fall sollten Sie getData() verwenden. Get ("Nachricht") https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/RemoteMessage.html –

Antwort

2

in Ihrer Frage die Sie senden eine Daten-Nachricht, die eine Nachricht mit einer Nutzlast wie ist: {"registration_ids" : ["token1"], "data" : { "key1" : "value1"}}

die data Nutzlast erhalten (im Beispiel: Key1: Wert1) sollte die Client-Anwendung zu verwenden:

String value1 = remoteMessage.getData().get("key1"); 

FCM unterstützt auch Display-Nachrichten.
Beispiel: {"registration_ids" : ["token1"], "notification" : { "body" : "hello"}}
Diese Nachrichten werden automatisch angezeigt, wenn sich die App im Hintergrund befindet. Und sie rufen onMessageReceived() nur wenn die App bereits geöffnet und im Vordergrund ist. In diesem zweiten Fall können Sie auf das Feld der ursprünglichen Meldung zugreifen: remoteMessage.getNotification().getBody()

Displaymeldungen können auch eine {"data" : { "key1" : "value1"}} enthalten.
Wenn die App im Vordergrund ist, kann sie auf diese Werte wie eine Datennachricht zugreifen.
Wenn die App in bakground Sie warten müssen, bis der Benutzer auf die Benachrichtigung klickt und eine Aktivität startet.
An diesem Punkt können Sie auf die Daten zugreifen über: getIntent().getExtras()

PS: die Benachrichtigungen über Firebase Web Console gesendet werden nur Display-Nachrichten.

+1

Beast antwort jetzt ich habe es alle klar danke –

Verwandte Themen