Ich verwende Firebase für unseren Messaging-Dienst in unserer Android App. Ich habe Firebase ziemlich gründlich recherchiert und ich verstehe, dass ob die App, wenn sie im Vordergrund läuft oder jetzt wird, den Typ der Daten ändern wird, die in den onMessageReceived-Methode .
Was ich versuche zu erreichen, besteht darin, die eingehenden Daten von der Remotemessage zu analysieren und je nach benutzerdefiniertem Tag etwas anderes zu tun. IE, wenn die Datenzuordnung ein Feld mit dem Namen "My_Custom_Tag" enthält, möchte ich die Standard-Firebase-Nachricht, die angezeigt wird, vollständig überschreiben und eine benutzerdefinierte Nachricht schreiben.
Das Problem ist, wenn die App im Hintergrund läuft, wird jeder Code, den ich in onMessageReceived nie eingegeben habe, ausgelöst. Es funktioniert problemlos, wenn die App im Vordergrund ausgeführt wird, erkennt jedoch nichts, wenn die App im Hintergrund ausgeführt wird.
Hier ist ein Beispielcode:
%Vor%Meine Frage ist, wie gehe ich vor, um MyFirebaseMessagingService zu bearbeiten, damit ich die eingehenden Daten prüfen, Tag-Informationen bestimmen und entscheiden kann, sie an fire base weiterzuleiten, damit sie die Standardbehandlung verwenden oder sie nicht an Firebase weiterleiten kann und schreibe meine eigene benutzerdefinierte Display-Benachrichtigung alle während meine App im Hintergrund läuft?
Danke allen!
PS, eine Chance hat der Firebase-Dungeon-Meister Frank van Puffelen einen Gedanken?
Entfernen Sie die Benachrichtigungsnutzdaten aus Ihren FCM-Nachrichten, damit die Datennutzinformationen an die onMessageReceived-Methode übermittelt werden.
Lesen Sie dies und dies sorgfältig.
Wenn sich Ihre App im Hintergrund befindet, werden die Datennutzdaten nur dann an die onMessageReceived-Methode übermittelt, wenn keine Benachrichtigungsnutzlast vorhanden ist . ( Markieren Sie die Wörter )
Wenn beide Nutzlasten vorhanden sind, behandelt das System automatisch den Benachrichtigungsteil (Systemtray) und Ihre App erhält die Datennutzlast in den Extras der Absicht der Launcher-Aktivität (nachdem der Benutzer auf die Benachrichtigung geklickt hat).
Um beide Plattformen erfolgreich bedienen zu können, Android und iOS, müssen Sie möglicherweise verschiedene FCM-Nachrichten entsprechend dem Betriebssystem des Clients senden.
Guyz Hören Sie gut zu, ich habe viele Links durchgelesen und schließlich eine Lösung gefunden.
Diese Nutzlast wird funktionieren ...
%Vor%Diese Nutzlast wird nicht funktionieren ...
%Vor%Wenn die Ladung "notification" enthält, ruft onMessageReceived nicht
auf Ziemlich sicher, Sie kennen bereits das Verhalten in Android, dass bei Verwendung von notification
und data
payload das Android-System die Inhalte von notification
abfängt und die data
-Nutzlast in der Absicht enthalten ist, wenn sie angezapft wird .
AFAIK, das ist der einzige Weg, dass es geht (wie von @ArthurThompson erwähnt hier ) und wenn Sie wirklich Möchten Sie sicherstellen, dass onMessageReceived()
immer aufgerufen wird, müssen Sie nur data
payload verwenden (wie von @DiegoGiorgini hier )
Aber ich habe mich umgesehen, vielleicht gibt es einen anderen Weg.
Ich habe es nicht selbst ausprobiert, aber haben Sie überprüft, welche Benachrichtigungen in der Statusleiste angezeigt werden Wenn Ihre Benachrichtigung vorhanden ist ( nicht ganz sicher, ob Sie tatsächlich feststellen können, welche eine Benachrichtigung für Ihre App ist, obwohl ), rufen Sie die Methoden auf, die Sie normalerweise in onMessageReceived()
aufrufen.
Sie können auch feststellen, ob die Geräte, an die Sie die Nachricht senden, ein Android-Gerät auf Ihrem App-Server sind und dann nur eine data
Nutzlast senden.
Tags und Links android push-notification firebase firebase-cloud-messaging