iOS UIBackgroundMode Remote-Benachrichtigung funktioniert nicht bei 4G

9

Ich teste Push-Benachrichtigungen mit content-available = 1, und sie werden anscheinend nicht im Hintergrund an die App gesendet, es sei denn, es handelt sich um eine Wi-Fi-Verbindung.

Ich habe am Anfang des Push-Benachrichtigungs-Handlers eine einfache log-Anweisung:

%Vor%

Hier ist mein Test:

  1. Starten Sie die App und drücken Sie die Home-Taste, um die App in den Hintergrund zu stellen.
  2. Senden Sie eine Push-Benachrichtigung mit content-available = 1
  3. Überwachen Sie die Konsolenprotokolle

Unter Wi-Fi zeigt das Konsolenprotokoll die Benachrichtigung an. Wenn ich zu den Einstellungen gehe und Wi-Fi ausschalte und zu 4G wechsle, erscheinen keine Benachrichtigungen mehr im Log (obwohl sie oben im Bildschirm eingeblendet werden, also weiß ich, dass sie geliefert werden).

Es gibt keine Absturzprotokolle und die Benachrichtigung wird protokolliert, wenn ich manuell darauf klicke. Darüber hinaus tritt dieses Problem NICHT auf, wenn ich die App in Xcode debuggen. (Wenn ich zum Beispiel in Xcode debugge, wird die App die Benachrichtigung im Hintergrund über 4G erhalten). Hat jemand anderes dieses Verhalten erfahren? Oder mache ich etwas falsch?

BEARBEITEN : Um genau zu sein: Wenn die folgenden Bedingungen erfüllt sind, wird gemäß meiner Tests die Remote-Benachrichtigungs-Delegate-Methode oben nicht aufgerufen:

  1. App läuft im Hintergrund
  2. Das Telefon befindet sich im LTE-Netzwerk und ist nicht mit dem WLAN verbunden
  3. App läuft NICHT im Xcode-Debugger
  4. Benachrichtigung mit Inhalt verfügbar = 1 wird vom Telefon empfangen

Wenn Bedingung 2 jedoch entfernt wird (d. h. das Telefon ist mit Wi-Fi verbunden), wird der Handler aufgerufen.

    
user1032657 24.07.2014, 08:24
quelle

3 Antworten

1

Basierend auf Feedback von einem Kommentator hier und wiederholten Tests auf mehreren Geräten, scheint dies ein Fehler (oder beabsichtigtes Verhalten) auf iOS zu sein.

    
user1032657 06.08.2014, 21:47
quelle
3

Probieren Sie den folgenden Code:

%Vor%

%Vor%     
bhavik 01.08.2014 07:20
quelle
0

Für mich funktionierte es auf WLAN und auf 4G (LTE wurde in den Mobilfunkeinstellungen deaktiviert), funktionierte aber nicht auf LTE.

Update: Nach umfangreichem Debugging habe ich dieses Problem bei LTE für zwei Dinge gefunden. Eins ist Macht. Ich habe festgestellt, dass das iPhone in die Wand eingesteckt war und die App wie erwartet aufgewacht ist. Wenn es nicht angeschlossen war, wurde die App nicht als Reaktion auf Inhalt-verfügbar = 1 geweckt. Zweitens, war Geräteeinstellungen. Obwohl alle zugehörigen Einstellungen korrekt vorgenommen wurden, wurde das Problem durch "Alle Einstellungen zurücksetzen" behoben.

Angenommen, es handelt sich nicht um einen Apple-Fehler, vermute ich, dass iOS unter bestimmten Umständen (Netzwerkstatus, Akkustatus usw.) ein Power-Profil für eine bestimmte App-ID entwickelt, um Apps mit übermäßigem Hintergrund nicht zu aktivieren Fahrräder. Wenn Sie beispielsweise beginBackgroundTaskWithExpirationHandler nicht korrekt verwenden, wird eine App im Hintergrund aktiv und zwingt iOS, diese ablaufen zu lassen. Selbst wenn Sie eine übermäßige Hintergrundnutzung beheben, wird das Problem möglicherweise nicht behoben, da iOS bereits festgestellt hat, dass Ihre App ein Hintergrundschwein ist. Dies würde erklären, dass 'Alle Einstellungen aufheben' das Problem für mich auflöst.

Leider ist dies alles nur eine Vermutung, basierend auf zwei bis drei Tagen Debugging dieses Problems, und wir werden es wahrscheinlich nie genau wissen, da so viele Variablen mit Push-Benachrichtigungen im Spiel sind, ganz zu schweigen von vagen und unterschiedlichen Dokumentationen.

    
Chad Podoski 21.11.2014 21:39
quelle