Ich habe eine ähnliche Frage zu SO gelesen , konnte jedoch keine korrekte Antwort erhalten.
Ich habe ein System, bei dem wir Benachrichtigungen an rund 500 Geräte senden.
Leider erhalten viele dieser Geräte keine Benachrichtigung. Ich habe festgestellt, dass Telefone der OPPO F1-Serie insbesondere keine Benachrichtigung erhalten.
Ich habe festgestellt, dass dies auftritt, wenn die App aus der Multitask-Taskleiste gestoppt wird. Wie löse ich das?
Update: Ich habe festgestellt, dass beim Schließen der App aus der Taskleiste meine App im Anwendungsmanager zum Stoppen gezwungen wird. Wenn ich WhatsApp aus dem Task-Tray schließe, wird es immer noch nicht zum Stoppen gezwungen. Wie geht WhatsApp damit um?
Antworten:
Update 03/2017 - Einschließlich eines Teils meiner Antwort hier .
Für das Thema in Bezug auf Wischen geschlossen / getötet / Gewalt gestoppt wurde dieses Thema seit einiger Zeit diskutiert und es scheint keine eindeutige Antwort zu geben. Während einem meiner Prüfung, ich bin in der Lage zu noch eine Nachricht erhalten (getestet mit einem
data
- nur Message - Payload) , wenn ich Swipe Nähe meiner App. Aber wenn ich Kraft geschlossen es aus dem Menü Einstellungen, ich konnte keine Nachrichten empfangen . Beachten Sie, dass dies nicht immer das Verhalten ist.Es gibt einige Geräte, die so konzipiert wurden, dass das Wischen beim Schließen der App dem erzwungenen Stoppen entspricht (siehe meine Antwort hier ).
Es gibt auch Geräte, bei denen das Gerät selbst den Empfang von Nachrichten verhindert, auch wenn die App immer noch einfach weggewischt wird , obwohl sie nicht zwangsweise geschlossen wird. Andere sagen, dass dies nicht der Fall sein kann, weil Apps wie WhatsApp dies konnten. Der Grund, den ich bisher dafür gelernt habe, ist, dass die Gerätehersteller die meisten bekannten Apps auf die Whitelist gesetzt haben , damit dies möglich ist.
Dies ist nirgendwo dokumentiert, da (IMO) dies ein Thema ist, das auch vom Gerät abhängt und über das FCM keine vollständige Kontrolle hat.
Ursprüngliche Antwort:
Da es gerätespezifisch ist ( wie Sie in Ihrem Beitrag erwähnt haben: Telefone der OPPO F1-Serie ), ist es sehr gut möglich, dass eine App, wenn sie in diesem Gerät aus der Multitask-Taskleiste gestoppt wird , die App tatsächlich beendet und die Dienste und verursacht andere damit verbundene Hintergrundprozesse sollen ebenfalls zerstört werden. In dieser Antwort erfahren Sie etwas mehr darüber, was ich sagen möchte.
Wenn Sie in der Community suchen, wird hier häufig empfohlen, das START_STICKY- Flag zu verwenden. Ich habe jedoch gesehen, dass es zuvor für erwähnt wurde
FirebaseMessagingService
(siehe diesen Beitrag , Kommentar von @ArthurThompson):Vor diesem Hintergrund besteht auch die Möglichkeit (erneut aus den Kommentaren):
Ich schlage vor, weitere Tests durchzuführen, wenn die Dienste vom Gerät selbst beendet werden oder ob Einstellungen vorhanden sind, die die Benachrichtigungen blockieren.
quelle
Haben Sie versucht, das stopWithTask- Attribut für Ihre Serviceklasse zu verwenden?
<service android:name="com.yourapp.YourPushService" android:stopWithTask="false" />
Wenn das Flag falsch ist, gibt es einen
onTaskRemoved
Rückruf in Ihrer Service-Klasse.In diesem Fall können Sie das "Swipe" -Ereignis erkennen und eine Problemumgehung implementieren.
quelle
com.yourapp.YourPushService
Sie Ihre Klasse eingeben, die erweitertFirebaseMessagingService
:)FirebaseMessagingService
wird immer ausgeführt, auch wenn die App aus der Taskleiste geschlossen wird. Ich bin mit @codepeakerIch habe das gleiche durchgemacht, aber in meinem Fall waren es Xiaomi-Telefone anstelle von Oppo-Telefonen. Was tatsächlich passiert, ist, dass das System die App vollständig beendet, wenn Sie die App aus der Taskleiste schließen. Dies bedeutet, dass Ihre App keine Benachrichtigungen über GCM / FCM empfangen kann.
WAKE_LOCK
Erlaubnis hilft auch nicht.Das bedeutet NICHT, dass das Telefon die Benachrichtigung nicht erhält. Es ist. Die Apps lassen es einfach nicht zu. Sie können dies überprüfen, indem Sie eine Sendung von adb senden und sich Ihren Logcat ansehen.
Eine mögliche Lösung für dieses Problem ist die Verwendung
SyncAdapter
. Obwohl es NICHT empfohlen wird, habe ich einige Apps gesehen, die es verwenden. Andere mögliche Lösungen sind die Verwendung eines Hintergrunddienstes, der immer ausgeführt wird. Einige Leute benutzenAlarmManager
es auch, da es fast nie getötet wird. Mein Punkt ist - Sie können sich bei Ihren Benachrichtigungen nicht auf GCM / FCM verlassen.Sprechen wir jetzt über WhatsApp -
In Xiaomi-Telefonen wird eine App anhand bestimmter Kriterien auf die Whitelist oder Blacklist gesetzt. Wenn Sie eine App herunterladen und diese in ihrer Whitelist enthalten ist, kann die App Benachrichtigungen anzeigen. Wenn nicht, wissen Sie bereits, was passiert. Aber das Gute ist, dass Sie diese Einstellungen ändern können. Suchen Sie nach einer App namens Sicherheit. Wenn Sie die richtigen Berechtigungen widerrufen, werden auch bei WhatsApp keine Benachrichtigungen mehr angezeigt.
quelle
SyncAdapter
Benachrichtigungen übermitteln können? Wir verwenden bereitsSyncAdapter
für die Synchronisierung unserer Daten. Wie können wir auch mit Push-Benachrichtigungen umgehen?SyncAdapter
in diesem FallIch hatte auch das gleiche Problem, aber dann wurde mir nach vielem Debuggen klar, dass ich die Dienste stoppte, die die
Firebase
Benachrichtigungen in der On-Stop-Methode einer der Aktivitäten erhalten.quelle
Antwort wurde hier gefunden
Es gibt keine Möglichkeit, Datennachrichten von der Benachrichtigungskonsole zu senden.
Es gibt aber auch andere Möglichkeiten, Benachrichtigungen an Geräte zu senden, und diese werden in onMessageReceived!
Sie können ein Terminal (Mac oder Linux) oder einen Dienst wie Postman verwenden, um eine Post-Anfrage über diesen Link zu senden: https://fcm.googleapis.com/fcm/send
mit dem nächsten Körper:
{ "to": "/topics/your_topic_here", "data": { "text":"text", "text1":"text1", ... } }
Außerdem müssen Sie 2 Header hinzufügen:
Um Ihren Serverschlüssel zu erhalten, finden Sie ihn in der Firebase-Konsole: Ihr Projekt -> Einstellungen -> Projekteinstellungen -> Cloud-Messaging -> Serverschlüssel
quelle
Wenn die App geschlossen wird, wird der Dienst heruntergefahren. Sie müssen den Dienst neu starten. Siehe hier
quelle