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: .
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)
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.
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.
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 .
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
%Vor%// diese Hilfe, um den FCM-Dienst im Hintergrund zu starten, wenn das Telefon neu gestartet wird.
Haben Sie Ihre Anwendung auf der FCM-Konsole registriert? Und hinzugefügt .json Datei in Ihrer Anwendung?
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
Da Sie von Firebase kein Protokollereignis erhalten haben, überprüfen Sie die folgenden Schritte:
app/
-Modul (Ändern Sie die Projektperspektive von Android in das Projekt), VERMEIDEN Sie den Dateinamen google-services.json
Firebase
, im Erfolgsfall sehen Sie die Nachricht: I / FirebaseInitProvider: FirebaseApp Initialisierung erfolgreich
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%Tags und Links android firebase firebase-cloud-messaging