Android-App erhält keine Firebase-Benachrichtigung, wenn die App aus der Multitask-Taskleiste gestoppt wird

72

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?

milan m
quelle
1
Das gleiche Problem kann gelöst werden. stackoverflow.com/a/45810771/1993001
Rahul Devanavar
Hier sind einige Schritte, die Ihnen helfen könnten.
IgniteCoders

Antworten:

54

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):

Diese Dienste werden von Google Play-Diensten gestartet, die immer auf dem Gerät ausgeführt werden. Sie müssen und sollten diese Dienste nicht selbst starten / stoppen.

Vor diesem Hintergrund besteht auch die Möglichkeit (erneut aus den Kommentaren):

Möglicherweise ist auf dem Gerät eine Einstellung vorhanden, die dies zulässt / nicht zulässt.


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.

AL.
quelle
2
@AL das ist wahr (ich habe nichts anderes gesagt), aber es wird Sie nicht daran hindern, Push-Benachrichtigungen zu erhalten. Google Play Services verfügt über eine permanente Verbindung zu GCM / FCM. Sobald eine Nachricht empfangen wird, wird Ihr deklarierter Dienst gestartet, um Ihnen die Nachricht zuzustellen. Es spielt also keine Rolle, ob Ihre App vollständig tot ist. Wenn Sie GCM korrekt implementiert haben, erhalten Sie die Nachricht.
Tomacco
1
@AL. Ja sicher, sehen Sie sich das an: stuff.mit.edu/afs/sipb/project/android/docs/google/gcm/gcm.html Sie sprechen kaum darüber, aber es ist ein interessantes Dokument. Weitere Informationen finden Sie auch in anderen SO-Antworten. stackoverflow.com/questions/19111901/…
Tomacco
2
@milanm Viele chinesische Anbieter, einschließlich OPPO, neigen dazu, iOS zu imitieren. In meinem Unternehmen haben wir festgestellt, dass viele von ihnen das Schließen in "Zuletzt verwendet" als das gewaltsame Abschalten der App betrachten. Noch wichtiger ist, dass dieses Verhalten nicht einheitlich erzwungen wird, dh beliebte IM-Apps sind von diesem Verhalten ausgenommen. Daher würde ich vorschlagen, dass Sie andere weniger beliebte Apps herunterladen und deren Verhalten testen.
Kai
2
@KapilRajput Haben Sie einen Link, um Ihre Behauptung zu unterstützen, damit ich ihn meinem Chef zeigen kann? : D
Lelloman
2
@AL. Es ist ein Emulator mit Android 25 mit Google API. Es funktioniert, wenn die App nicht gezwungen wird, geschlossen zu werden. Haben Sie Ratschläge zum Debuggen? auch das gleiche auf einem OnePlus 3T mit Android 7.1.1
Lelloman
19

Haben Sie versucht, das stopWithTask- Attribut für Ihre Serviceklasse zu verwenden?

<service
    android:name="com.yourapp.YourPushService"
    android:stopWithTask="false" />

Wenn true festgelegt ist, wird dieser Dienst automatisch gestoppt, wenn der Benutzer eine Aufgabe entfernt, die in einer Aktivität der Anwendung verwurzelt ist. Der Standardwert ist false.

Wenn das Flag falsch ist, gibt es einen onTaskRemovedRückruf in Ihrer Service-Klasse.

In diesem Fall können Sie das "Swipe" -Ereignis erkennen und eine Problemumgehung implementieren.

danesz
quelle
das hat bei mir funktioniert. In der müssen com.yourapp.YourPushServiceSie Ihre Klasse eingeben, die erweitert FirebaseMessagingService:)
Michele La Ferla
1
also wahr oder falsch setzen? für verhindern töten Dienst
Farzad
18
Der Standardwert von stopWithTask ist false. Worum geht es also?
Codepeaker
Laut Frage FirebaseMessagingServicewird immer ausgeführt, auch wenn die App aus der Taskleiste geschlossen wird. Ich bin mit @codepeaker
Faizan Mubasher
10

Ich 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_LOCKErlaubnis 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 benutzen AlarmManageres 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.

thetanuj
quelle
1
Können Sie näher erläutern, wie Sie SyncAdapterBenachrichtigungen übermitteln können? Wir verwenden bereits SyncAdapterfür die Synchronisierung unserer Daten. Wie können wir auch mit Push-Benachrichtigungen umgehen?
September
Bitte geben Sie ein Beispiel für die Verwendung SyncAdapter in diesem Fall
Blueware
4

Ich hatte auch das gleiche Problem, aber dann wurde mir nach vielem Debuggen klar, dass ich die Dienste stoppte, die die FirebaseBenachrichtigungen in der On-Stop-Methode einer der Aktivitäten erhalten.

  1. Bitte überprüfen Sie, ob Sie diese Dienste irgendwo in der App beenden.
  2. Stellen Sie sicher, dass Sie Service und nicht Intent-Service verwenden.
  3. Durch Wischen der App werden die Dienste niemals gestoppt. Versuchen Sie also, die App für die ersten beiden Punkte zu debuggen.
Mohammed Atif
quelle
2

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:

  1. Autorisierung - key = your_server_key_here
  2. Inhaltstyp - Anwendung / JSON

Um Ihren Serverschlüssel zu erhalten, finden Sie ihn in der Firebase-Konsole: Ihr Projekt -> Einstellungen -> Projekteinstellungen -> Cloud-Messaging -> Serverschlüssel

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Andriy Antonov
quelle
-3

Wenn die App geschlossen wird, wird der Dienst heruntergefahren. Sie müssen den Dienst neu starten. Siehe hier

mabg
quelle