Firebase Cloud Messaging - onMessageReceived funktioniert nicht

7

Ich möchte eine einfache Benachrichtigungsfunktion in meiner App einrichten. Ich folgte diesem YouTube-Video und diesen beiden Firebase-Dokumentations-URLs 1 und 2 und der Firebase-Tool-Assistent in Android Studio (der besagt, dass ich mit Firebase verbunden bin). Aus irgendeinem Grund funktioniert es nicht auf meiner 2 Jahre alten App, sondern perfekt auf einer neuen App, die ich nur erstellt habe, um zu testen, ob meine Schritte korrekt sind. Diese App hat ohne Probleme funktioniert. Ich habe beide Apps im Hintergrund, aktiv und beendet getestet.

Ich habe auch schon alle diese SO-Beiträge ausgecheckt: 1 2 3 und mehr

Hier ist mein problematischer Code:

Notification.java (es ist ein Service wie die Dokumentation fragt)

%Vor%
  

Beachten Sie, dass ich oben in notification.java kein Protokoll erhalte.

Project.gradle

%Vor%

app.gradle

%Vor%

AndroidManifest.xml

%Vor%
  

Arbeitscode unten (die App, die ich gemacht habe, um meine Schritte zu testen und 100% funktioniert):

Notifaction.java

%Vor%

AndroidManiest.xml

%Vor%

%Vor%

app.gradle

%Vor%

Projekt.grdle

%Vor%

Außerdem habe ich die .json-Datei beiden Projekten hinzugefügt. Hier ist ein Screenshot: .

    
Lazar Kukolj 24.02.2018, 23:00
quelle

10 Antworten

4

Wenn Sie Geräte-Token empfangen und einen Server-API-Schlüssel haben, überprüfen Sie, ob Ihr Code ordnungsgemäß funktioniert oder Pushtry nicht verwendet. Es wird Fehler wie Ungültige Registrierung , 404 Fehler etc. geben, wenn Sie einen Fehler in Ihrem Code gemacht haben. und für die Implementierung von FCM können Sie diesem Tutorial folgen - FCM-Lernprogramm

Eine weitere Sache, die ich in Ihrer build.gradle -Datei bemerkt habe, ist keine applicationId "Package Name" in defaultConfig . Ich bin mir nicht sicher, aber das ist Paketname und wird verwendet, wenn wir ein Projekt auf der Firebase-Konsole erstellen (Projektname mit Paket)

    
aj0822ArpitJoshi 01.03.2018 07:15
quelle
3

Entfernen Sie die Benachrichtigungsnutzdaten aus Ihren FCM-Nachrichten, damit die Datennutzinformationen an die onMessageReceived-Methode übermittelt werden.

Lesen Sie den unten angegebenen Link sorgfältig.

Wenn Ihre App im Hintergrund ausgeführt wird, werden Datennutzdaten nur an die onMessageReceived-Methode übermittelt, wenn keine Benachrichtigungsnutzlast vorhanden ist. (Markieren Sie die Wörter)

Wenn beide Nutzlasten vorhanden sind, verarbeitet das System automatisch den Benachrichtigungsteil (Systemtray) und Ihre App erhält die Datennutzlast in den Extras der Absicht der Startaktivitä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.

    
tushar 02.03.2018 17:19
quelle
3

Wenn Sie sich dieses Dokument ansehen Sie scheinen keinen Service zu haben, der FirebaseInstanceIdService erweitert, um die Tokenerstellung / -rotation zu verwalten. Hier ist ein Beispielcode. Das Token, das Sie benötigen, um die Push-Benachrichtigungen an ein bestimmtes Gerät zu senden, wird von dieser Klasse empfangen.

%Vor%

BEARBEITEN :

Okay, dieser Fehler nervt mich jetzt. Ich habe Ihren Abhängigkeitsbaum betrachtet und ich sehe, dass Sie einige von ihnen wiederholen. Zum Beispiel haben Sie drei Versionen von:

%Vor%

Vielleicht sollten Sie das auf die neueste Version zurücksetzen oder mit der Arbeitsversion abgleichen. Du benutzt auch das neue Gradle-Plugin, aber du hast deine Abhängigkeiten nicht so aktualisiert, dass implementation anstelle von compile in den meisten Fällen verwendet wird. Probiere das vielleicht auch aus? Hier ist warum sollten Sie es tun .

%Vor%     
Levi Albuquerque 25.02.2018 00:17
quelle
3

Wahrscheinlich werden Ihre Benachrichtigungen aufgrund von Android Oreo nicht angezeigt Benachrichtigungsmodell , in dem Kanaldefinitionen festgelegt werden müssen, um Benachrichtigungen zu erstellen und anzuzeigen. Auch in deiner app.gradle, Targeting Android Version 26 das ist Android Oreo , so müssen Sie den Code in beide Richtungen implementieren.

Es ist leicht zu übernehmen. Alles, was Sie tun müssen, ist:

1. Definieren Sie einen Benachrichtigungskanal in Ihrer YourApplicationClass.onCreate ()

%Vor%

2. Ersetzen Sie den Benachrichtigungsersteller durch diesen Konstruktor

%Vor%

Gut zu wissen, dass Sie mehr als einen Kanal mit verschiedenen Eigenschaften für Android Oreo und höher definieren können

    
Bassel Mourjan 03.03.2018 19:32
quelle
1

Lassen Sie die App einen Wert in der Firebase-Datenbank abhören und ändern Sie sie als die gewünschte Nachricht. Ich tue dies zu meinen Anwendungen und es funktioniert wie Charme.

    
anas 27.02.2018 03:55
quelle
1
  

// diese Hilfe, um den FCM-Dienst im Hintergrund zu starten, wenn das Telefon neu gestartet wird.

%Vor%     
Jaspreet Kaur 27.02.2018 04:45
quelle
1

Haben Sie Ihre Anwendung auf der FCM-Konsole registriert? Und hinzugefügt .json Datei in Ihrer Anwendung?

    
Ashwini Atale 28.02.2018 12:26
quelle
1

Es gibt zwei Arten von Benachrichtigungsdaten 1) Benachrichtigungsnutzlast 2) Datennutzlast Wenn Sie Daten vom Server in Mitteilungsnutzungsdaten senden. Es besteht die Möglichkeit, onMessageRecieved () von FirbaseMessagingService nicht aufzurufen. Schauen Sie sich an Dieser Link

    
Mohd Qasim 01.03.2018 10:40
quelle
1

Da Sie von Firebase kein Protokollereignis erhalten haben, überprüfen Sie die folgenden Schritte:

  • Gehen Sie in Ihre Firebase-Projektkonsole, geben Sie die Projekteinstellungen ein und prüfen Sie, ob der Paketname korrekt ist.
  • Laden Sie die JSON-Datei erneut herunter und kopieren Sie sie in das app/ -Modul (Ändern Sie die Projektperspektive von Android in das Projekt), VERMEIDEN Sie den Dateinamen google-services.json
  • Führen Sie Ihr Projekt aus, gehen Sie zu logcat Suche nach Schlüsselwort Firebase , im Erfolgsfall sehen Sie die Nachricht:
  

I / FirebaseInitProvider: FirebaseApp Initialisierung erfolgreich

    
Pavel Poley 02.03.2018 10:18
quelle
1

Ich hoffe, Sie kennen die Arten von Benachrichtigungen. Um Benachrichtigungen zu senden, müssen Sie einen benutzerdefinierten Server oder etwas wie Postboten verwenden. Weitere Informationen finden Sie in der Antwort auf diese Frage:

Wie mit der Benachrichtigung umzugehen, wenn die App im Hintergrund in Firebase

Wie auch immer, Sie müssen in Ihrem FirebaseMessagingService die Methode handleIntent (Intent Intent) aufrufen, um die Methode MessageReceived () aufzurufen.

Hier ist mein vollständiger Arbeitscode, Benachrichtigung-wenn-App-im-Hintergrund-in-Firebase.

build.gradle:

%Vor%

AndroidManifest.xml:

%Vor%

MyFirebaseMessagingService.java:

%Vor%

MyFirebaseInstanceIDService.java:

%Vor%

MeinJobService.java

%Vor%

MyApplication.java:

%Vor%

MainActivity.java:

%Vor%     
Milan Hirpara 05.03.2018 10:43
quelle