Wie man mit der Benachrichtigung arbeitet, wenn die App im Hintergrund in Firebase läuft
Hier ist mein manifest
<service android:name=".fcm.PshycoFirebaseMessagingServices">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".fcm.PshycoFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
Wenn die app im hintergrund läuft, und die Benachrichtigung kommt dann die Standard Meldung kommt und nicht mit meinem code von onMessageReceived
.
Hier ist mein onMessageReceived
code. Dies ruft, wenn meine app läuft auf Vordergrund, und nicht, wenn app im hintergrund. Wie um diesen code auszuführen, wenn die app im hintergrund zu?
//[START receive_message]
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
//TODO(developer): Handle FCM messages here.
//If the application is in the foreground handle both data and notification messages here.
//Also if you intend on generating your own notifications as a result of a received FCM
//message, here is where that should be initiated. See sendNotification method below.
data = remoteMessage.getData();
String title = remoteMessage.getNotification().getTitle();
String message = remoteMessage.getNotification().getBody();
String imageUrl = (String) data.get("image");
String action = (String) data.get("action");
Log.i(TAG, "onMessageReceived: title : "+title);
Log.i(TAG, "onMessageReceived: message : "+message);
Log.i(TAG, "onMessageReceived: imageUrl : "+imageUrl);
Log.i(TAG, "onMessageReceived: action : "+action);
if (imageUrl == null) {
sendNotification(title,message,action);
} else {
new BigPictureNotification(this,title,message,imageUrl,action);
}
}
//[END receive_message]
InformationsquelleAutor der Frage Parth Patel | 2016-06-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
1. Warum ist das passiert?
Es gibt zwei Arten von Nachrichten, die in FCM (FB Cloud Messaging):
onMessageReceived()
callback nur, wenn Ihre app in VordergrundonMessageReceived()
Rückruf auchwenn Ihre app in Vordergrund - /hintergrund - /getötetFB team noch nicht entwickelt, eine Benutzeroberfläche zu senden
data-messages
um Ihre Geräte, noch.2. Wie?
Um dies zu erreichen, müssen Sie eine
POST
die folgende URL:Und die folgenden überschriften:
Content-Type
Wert:application/json
Authorization
Wert:key=<your-server-key>
Körper mit Themen:
Oder wenn Sie möchten, senden Sie es an bestimmte Geräte:
3. Wie man mit den push-notification-Nachricht?
Dies ist, wie Sie mit der Nachricht:
InformationsquelleAutor der Antwort Antonio
Machen FB-Bibliothek zu nennen, Ihre onMessageReceived() in den folgenden Fällen
müssen Sie nicht JSON-Schlüssel "Meldung" in Ihrer Anfrage an FB-API, sondern "Daten", siehe unten.
Wird die folgende Meldung wird nicht rufen Sie Ihren onMessageReceived ()wenn Ihre app im hintergrund oder getötet zu werden, und Sie können nicht passen Sie Ihre Mitteilung.
sondern mit diesem arbeiten
Grundsätzlich wird die Nachricht gesendet, der in der argument-RemoteMessage zusammen mit Ihren Daten-Objekt als Map, dann können Sie verwalten die Meldung im onMessageReceived wie in der snippet hier
InformationsquelleAutor der Antwort Teerakiat Chitawattanarat
Ich fühle mich wie alle Antworten sind unvollständig aber alle von Ihnen haben etwas, das Sie brauchen, um eine Meldung Bearbeiten, die Daten, wenn die app im hintergrund läuft.
Befolgen Sie diese Schritte und Sie werden in der Lage, Ihre Benachrichtigungen, wenn die app im hintergrund.
1.Hinzufügen eines intent-filter wie dieser:
zu einer Aktivität, die Sie Bearbeiten möchten, die Daten der Meldung.
Senden von Benachrichtigungen mit dem folgenden format:
Hier der Schlüssel ist, fügen Sie
wo .MainActivity ist die Tätigkeit mit dem Vorsatz-filter, den Sie in Schritt 1 Hinzugefügt haben.
Get "Daten" Informationen aus der Benachrichtigung in der onCreate ".MainActivity":
Und das sollte alles sein, was Sie tun müssen. Ich hoffe, das hilft jemandem 🙂
InformationsquelleAutor der Antwort Daniel S.
Laut docs
Edit :
Basierend auf dieser thread :
Kann nicht festgelegt werden, click_action Nutzlast mit FB-Konsole. Sie könnten versuchen, den Test mit dem curl-Befehl oder einen benutzerdefinierten http-server
InformationsquelleAutor der Antwort Shubhank
Laut der FB-Dokumentation in senden downstream mit FBes gibt 2 Art der Nutzlast :
Daten
Benachrichtigung
Sind, wenn Sie im Vordergrund Sie können die Daten innerhalb FCM mit onMessageReceived()können Sie sich Ihre Daten aus Daten Nutzlast.
Sind, wenn Sie in den hintergrund, FCM erscheint die Meldung im system-tray auf der Grundlage der Informationen aus Benachrichtigung Nutzlast. Titel, Nachricht und das Symbol verwendet, für die Benachrichtigung im system-tray aus der Benachrichtigung Nutzlast.
Diese Benachrichtigung Nutzlast verwendet werden, wenn Sie wollen automactically zeigt Benachrichtigungen auf der Taskleiste, wenn die app im hintergrund.
Um benachrichtigt zu Daten, wenn die app im hintergrund, sollten Sie click_action innen Benachrichtigung Nutzlast.
Setzen, die intent-filter auf Ihrem manifest, inside application-tag. Wenn Sie auf die Benachrichtigung, öffnet sich die app und gehen Sie direkt zu der Aktivität, die Sie definieren, in click_action, in diesem Fall "OPEN_ACTIVTY_1".
Und in dieser Aktivität können Sie die Daten durch :
Ich bin mit FCM für meine android-app und verwenden Sie beide der Nutzlast.
Hier ist das Beispiel-JSON bin ich mit :
InformationsquelleAutor der Antwort Hendy Evan
Da die
display-messages
die gesendet werden von der FB-Benachrichtigung UI funktioniert nur, wenn die app im Vordergrund. Fürdata-messages
ist es erforderlich, einen POST-Aufruf an FCMSchritte
Installieren Sie Advanced Rest Client Für Google Chrome Erweiterung
Fügen Sie die folgenden überschriften
Schlüssel: Content-Type, Wert: application/json
Schlüssel: Autorisierung, Wert: key="server-Schlüssel"
Fügen Sie den Körper
Wenn Sie mit Themen :
Wenn Sie mit Registrierungs-id :
Thats it!. Jetzt hören
onMessageReceived
Rückruf wie üblich.InformationsquelleAutor der Antwort Anirudh Ramanan
Erfassen Sie die Nachricht im hintergrund, die Sie benötigen, um ein
BroadcastReceiver
und fügen Sie diese zu Ihrem manifest:
InformationsquelleAutor der Antwort Romulano
nicht aufgerufen wird, jedes mal, wenn es aufgerufen wird, nur wenn app ist im forground
es ist eine Methode überschreiben diese Methode wird aufgerufen, jedes mal , egal welche app im Vordergrund oder im hintergrund oder getötet werden, aber diese Methode ist mit dieser FB-api version
dies ist die version u importieren von gradle
dies ist die Methode,
vorherigen FB-api dieser Methode war es nicht so in diesem Fall
fire base behandeln, selbst wenn die app im hintergrund läuft .... jetzt haben Sie u diese Methode
was auch immer u wollen ... u kannst es hier in diesem Methode .....
wenn Sie mit der vorherigen version als Standard-Aktivität wird gestartet
in diesem Fall kann u get data gleicher Weise
//do was auch immer u wollen ....
}
in der Regel ist dies die Struktur vom server bekommen wir in der Benachrichtigung
es ist bis zu u, wie u wollen, zu geben, die Daten-Taste oder u wollen mit der Meldung etwas u geben kann .......
was auch immer u wird hier mit derselben Taste u wird an diese Daten kommen .........
gibt es einige Fälle, wenn u r nicht zu senden klicken Sie auf Aktion in diesem Fall, wenn u klicken Sie auf Benachrichtigung default-Aktivität wird geöffnet , aber wenn u wollen, öffnen Sie Ihre spezifische Aktivität, wenn app ist im hintergrund-u aufrufen können, Ihre Aktivität von dieser handleIntent Methode, denn diese wird immer dann aufgerufen, wenn
InformationsquelleAutor der Antwort Avinash Jadaun
Hier gibt es mehr klare Konzepte über FB-Nachricht. Ich fand es von Ihrem support-team.
FB hat drei message-Typen:
Benachrichtigungen : Benachrichtigung funktioniert auf den hintergrund oder den Vordergrund. Wenn app ist im hintergrund-Benachrichtigungen geliefert werden, die system-tray. Wenn die app im Vordergrund ist, die Nachrichten werden behandelt, indem
onMessageReceived()
oderdidReceiveRemoteNotification
Rückrufe. Dies sind im wesentlichen die so genannten Display-Meldungen.Daten-Nachrichten: Auf Android-Plattform, Daten-Nachricht arbeiten können hintergrund-und Vordergrund. Die Daten-Nachricht wird von onMessageReceived(). Eine Plattform-spezifische note wäre hier: Auf Android, die Daten-Nutzlast kann abgerufen werden in der Absicht verwendet, um starten Sie Ihre Aktivität. Zu erarbeiten, wenn Sie
"click_action":"launch_Activity_1"
können Sie abrufen, diese Absicht durchgetIntent()
von nurActivity_1
.Nachrichten mit beiden Benachrichtigungs-und Daten-payloads: Wenn im hintergrund apps erhalten die Nutzdaten der Benachrichtigung in der notification tray, und verarbeiten nur die Daten -, payload ' wenn der Benutzer tippt auf die Benachrichtigung. Wenn Sie im Vordergrund ist, erhält Ihre app ein message-Objekt mit beiden Nutzlasten zur Verfügung. Zweitens, die
click_action
parameter wird Häufig verwendet, in notification payload und nicht im Daten -, payload'. Wenn im Daten -, payload, dieser parameter würde behandelt werden als benutzerdefinierte Schlüssel-Wert-paar, und deshalb würden Sie brauchen, zu implementieren benutzerdefinierte Logik für Sie zu arbeiten, wie beabsichtigt.Außerdem empfehle ich Ihnen die Verwendung
onMessageReceived
- Methode (siehe Daten-Nachricht) zum extrahieren der Daten-bundle. Aus deiner Logik, ich habe das bundle-Objekt und nicht das gefunden haben, erwartet Daten. Hier ist ein Verweis auf einen ähnlichen Fall, der vielleicht mehr Klarheit.Für mehr info besuchen Sie meine dieser thread
InformationsquelleAutor der Antwort Md. Sajedul Karim
2017 fortgeschrieben Antwort
Hier ist eine klare Antwort aus der docs in Bezug auf diese:
InformationsquelleAutor der Antwort pulp_fiction
Laut der docs: Mai 17, 2017
Also sollten Sie beide der payload notification + Daten:
Gibt es keine Notwendigkeit zu verwenden click_action.Sie sollten nur exras von der Absicht, auf LAUNCHER Aktivität
Java-code sollte auf der onCreate-Methode auf MainActivity :
Können Sie testen, sowohl von der payload notification + Daten aus FB-Benachrichtigungen-Konsole . Vergessen Sie nicht, füllen Sie benutzerdefinierte Datenfelder auf den Abschnitt "Erweiterte Optionen"
InformationsquelleAutor der Antwort Mihuilk
Dachte ich, die Szenarien,
Wenn app ist im Vordergrund
onMessageReceived() Methode wird aufgerufen, aus dem FirebaseService.Also die pendingIntent definiert in der service-Klasse aufgerufen werden.
Und wenn app ist im hintergrunderste Aktivität genannt wird.
Nun, wenn Sie eine splash Aktivitätdann muss beachten Sie die splashactivity aufgerufen werden, sonst, wenn es keine splashActivity, dann, was die erste Tätigkeit ist, aufgerufen werden.
Dann müssen Sie prüfen, getIntent() der firstActivity um zu sehen, ob es irgendwelche bundle .wenn alles in Ordnung ist, sehen Sie bundle gibt es mit Werten gefüllt. Wenn der Wert in Daten tag gesendet vom server sieht so aus,
Dann in der ersten Aktivität werden Sie sehen,
es gibt einen gültigen Willenserklärungen( getIntent() ist nicht null) , gültig bündeln und innen-bundle , gibt es das ganze JSON oben erwähnt mit Daten als Schlüssel.
Für dieses Szenario, code für die Extraktion der Wert wird so Aussehen,
InformationsquelleAutor der Antwort Shamsul Arefin Sajib
Einfache Zusammenfassung, wie diese
wenn Ihre app ausgeführt wird;
ist Trigger.
wenn Ihre app nicht ausgeführt wird (getötet durch streichen) ;
nicht ausgelöst und geliefert direkt. Wenn Sie irgendwelche speziell Schlüssel-Wert-paar. Sie don' t arbeiten, weil der onMessageReceived() funktioniert nicht.
Ich' ve gefunden, auf diese Weise;
Im launcher Aktivität, setzen Sie dieser Logik,
in diesem if-block, suchen für Ihre Schlüssel laut FB-UI.
In diesem Beispiel meine Schlüssel und Wert wie oben; (sorry für die Sprache =))
Wenn mein code funktioniert, ich bekomme "com.rda.Hinweis".
mit dieser Codezeile, Schloss ich die Anwendung und öffnen Sie Google-Play-Markt
happy coding =)
InformationsquelleAutor der Antwort Arda
Benachrichtigung entfernen Nutzlast vollständig von Ihrem server anfordern. Senden nur Daten und behandeln es in
onMessageReceived()
sind, sonstonMessageReceived
wird nicht ausgelöst, wenn die app im hintergrund läuft oder getötet.Hier ist, was ich bin, das versenden vom server:
So erhalten Sie Ihre Daten in
onMessageReceived(RemoteMessage message)
so aus: (lassen Sie s sagen, ich habe die id)Und auf ähnliche Weise können Sie alle Daten, die Sie gesendet haben, vom server innerhalb
onMessageReceived()
.InformationsquelleAutor der Antwort Zohab Ali
Der einfache Weg, um Nachrichten zu senden, auch wenn die app in hintergrund und Vordergrund, die als Folge von:-
Senden Sie eine Nachricht mithilfe von API -, Sie können ein tool namens AdvancedREST Client, es ist eine chrome-Erweiterung, und senden einer Nachricht mit den folgenden Parametern.
Rest-client-tool Link: https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo
verwenden Sie diese url ein:- https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Autorisierung:key=Dein-Server-Schlüssel Aus oder Authoization-Taste(siehe unten ref)
Autorisierungs-Schlüssel kann erworben werden durch den Besuch der Google-Entwickler-Konsole, und klicken Sie auf Anmeldeinformationen-Taste auf der linken Menü für Ihr Projekt. Unter den API-Schlüssel angegeben, wird der server-key wird Ihren Autorisierungs-key.
Und Sie brauchen, um tokenID der Empfänger in der "to" - Abschnitt der POST-Anforderung gesendet mit API.
InformationsquelleAutor der Antwort Syed Danish Haider
Dank an Euch Alle für Eure Antworten. Aber ich löste dies durch senden von Nachricht anstatt Benachrichtigung.
Server-code
Und fing die Daten in onMessageReceived
InformationsquelleAutor der Antwort Android Sanaullah
habe ich E-mail-fcm-support und geben Sie mir Lösung.
fcm support-mail erhalten, auf 14-12-2017
ersten ich bin dem senden von Benachrichtigungen mit den Daten durch die FB-Konsole
diese notifiaction kommen, perfekt, wenn app ist offen, dass bedeutet, forground app .
diesen code habe ich auf meinem Haupt-Aktivität
InformationsquelleAutor der Antwort Android_Rocks
Juni 2018 Antwort -
Müssen Sie sicherstellen, dass es nicht eine "Meldung" Schlüsselwort irgendwo in der Nachricht. Nur sind "Daten", und die app wird in der Lage sein zu handhaben, die Nachricht in onMessageReceived, auch wenn im hintergrund oder getötet werden.
Mit Cloud-Funktionen:
Dann in Ihre onMessageReceived(), in Ihrer Klasse, die sich com.google.FB.messaging.FirebaseMessagingService :
InformationsquelleAutor der Antwort Jeff Padgett
Ich erfahren habe das gleiche problem und kompiliert die FB Bibliothek und es verhindert das senden von Benachrichtigungen, wenn die Anwendung im hintergrund
*Bibliothek
https://github.com/erdalceylan/com-google-firebase-messaging
*
hoffe, dass hilft. Viel Glück
InformationsquelleAutor der Antwort Erdal CEYLAN