In Android Nougat und höher werden Push-Benachrichtigungen für Ihre App nach dem 4. Platz automatisch zusammengefasst.
Das Problem in Android ist, dass durch Klicken auf das Bundle die Push-Benachrichtigungsliste nicht erweitert wird, sondern die App geöffnet wird.
Ich muss Benutzer identifizieren, die die App über eine Push-Benachrichtigung geöffnet haben. Für einzelne Benachrichtigungen ist dies einfach, da ich Vorsatz-Extras untersuchen kann. Das Problem mit dem Bundle ist, dass die Extras null sind und die Absicht genauso aussieht, als ob der Benutzer auf das Startsymbol geklickt hätte. Ich kann anhand einer Push-Benachrichtigung nicht feststellen, dass die Navigation erfolgt ist :(
Nur für den Fall, dass es nicht klar ist: Ich verwende keine expliziten Push-Benachrichtigungsgruppen. Dies wird automatisch von Android durchgeführt. Ich habe keinen Gruppenschlüssel für die Benachrichtigungen festgelegt.
Ich benutze Firebase. Ich erstelle die Push-Benachrichtigung nur, NotificationCompat
wenn sich die App im Vordergrund befindet. Diese Logik wird nicht ausgeführt, wenn sich die App im Hintergrund befindet oder geschlossen ist (wird OnMessageReceived
nur mit der App im Vordergrund ausgeführt).
BEARBEITEN
Ich weiß, dass ich die PN-Nutzdaten für das Ereignis ändern kann, das OnMessageReceived
sogar im Hintergrund ausgeführt oder geschlossen wird. Ich möchte dies vermeiden, da ich viele Leute gefunden habe, die sich über Probleme mit PN beschweren, die in diesem Fall nicht ankommen.
http://github.com/firebase/quickstart-android/issues/368
http://github.com/firebase/quickstart-android/issues/219
Ich möchte einen Benutzer erkennen, der auf eine gruppierte PN tippt, auch wenn die App diese nicht erstellt hat.
quelle
Antworten:
Lösung 1: Wenn Sie die Erstellung der Benachrichtigungen durchführen, können Sie die folgenden Schritte ausführen:
Zunächst können Sie jedes Mal, wenn Sie eine neue Benachrichtigung erstellen, diese nach demselben Schlüssel gruppieren, indem Sie Folgendes verwenden
setGroup(...)
:Wenn Sie Benachrichtigungen nach derselben ID ("group_messages") gruppiert haben , können Sie jetzt eine zusammenfassende Benachrichtigung mit unterschiedlicher Absicht erstellen:
Als letzten Schritt können Sie
if
überprüfen, ob Sie mehr als eine Benachrichtigung mit derselben Gruppe haben, und dann mit einer Gruppenbenachrichtigung benachrichtigen:Sie können den Code in Ihrer
onMessageReceived
Methode kombinieren . Wie Sie sehen, können Sie jetzt benutzerdefinierte Absichten haben, gruppierte Benachrichtigungen zu verarbeiten. Weitere Informationen zu gruppierten Benachrichtigungen finden Sie hier .Lösung 2: Wenn Sie die Erstellung von Benachrichtigungen nicht verarbeiten möchten und dennoch wissen möchten, ob die Benachrichtigungen gruppiert sind, können Sie die folgende Lösung ausprobieren:
NotificationManager
hat die Funktion getActiveNotifications () , die Benachrichtigungen zurückgibt , die von der aufrufenden App gepostet und vom Benutzer noch nicht verworfen wurden. Wenn Sie in Android auf gruppierte Benachrichtigungen klicken, werden Benachrichtigungen nicht geschlossen. Daher können Sie die Größe der aktiven Benachrichtigungen in Ihrer Launcher-Aktivität überprüfen, um festzustellen, ob die App gestartet wurde, indem Sie auf gruppierte / gebündelte Benachrichtigungen klicken:Persönlich würde ich die erste Lösung bevorzugen, aber entsprechend den von Ihnen veröffentlichten Problemen können Sie auch die zweite Option verwenden. Beachten Sie jedoch, dass Sie nicht unterscheiden können, ob die App über den Launcher oder durch Klicken auf gruppierte Benachrichtigung gestartet wurde.
Bei der zweiten Lösung können folgende Fragen auftreten:
Frage 1: Wie kann ich einen normalen Benachrichtigungsklick von einer Gruppe in derselben Aktivität unterscheiden?
- Sie können einfach
click_action
normale Benachrichtigungsklicks definieren und an verschiedene Aktivitäten weiterleiten. Überprüfen Sie die Dokumente .Wenn Sie frühere Benachrichtigungen ersetzen möchten, können Sie diese auch
tag
in Ihrem Benachrichtigungs-JSON auf der Backend-Seite definieren. Auf diese Weise werden Benachrichtigungen nicht gebündelt, da neuere Benachrichtigungen die alte durch dasselbe Tag ersetzen. Überprüfen Sie die Dokumente .Ich hoffe meine Antwort hilft.
quelle
OnMessageReceived
wird nicht ausgeführt, wenn die App geschlossen wird. Ich habe eine Dokumentation gesehen, die besagt, dass selbst wenn ich es schaffe, dass die App PN verarbeitet, wenn die App geschlossen ist oder im Hintergrund, dies überhaupt nicht gut funktioniert.Die Antwort von @Natig Babayev ist gut erklärt. Im zweiten Teil hat er jedoch nicht erklärt, wie man unterscheiden kann, ob die App durch Klicken auf das Startsymbol oder durch Klicken auf Push-Benachrichtigungspaket geöffnet wurde (berücksichtigen Sie den Fall, wenn 5 Benachrichtigungen automatisch gruppiert werden, der Benutzer jedoch die App durch Klicken auf den App Launcher und nicht auf das Benachrichtigungspaket.)
Eine Lösung könnte darin bestehen, automatische Gruppierungsbenachrichtigungen zu deaktivieren . Dies ist jedoch nicht möglich . Beziehen Sie sich auf diese und diese Frage
Ich habe viele verschiedene Optionen untersucht und festgestellt, dass die beste Lösung darin besteht, die Benachrichtigung selbst zu gruppieren, bevor das Android-System dies tut, oder die Anzahl der Benachrichtigungen auf maximal nicht gruppierte Benachrichtigungen zu beschränken, indem ältere Benachrichtigungen entfernt oder in einem separaten Paket zusammengefasst werden.
Sie können sich auch auf Folgendes beziehen
quelle