Ich schreibe eine iOS / Swift-Anwendung, die alle X Minuten Daten aus einem REST-Dienst liest und die Benutzeroberfläche entsprechend aktualisiert.
Nun möchte ich, dass, wenn die App in den Hintergrund gestellt wird, eine Task in X-Minuten-Intervallen vom REST-Service aus aufgerufen wird und, falls die gerade gelesenen Daten eine gegebene Bedingung erfüllen, eine Benachrichtigung anzeigen, die den Benutzer auffordert um die App wieder in den Vordergrund zu bringen.
Bei meinen Suchen habe ich gelesen, dass ich während applicationDidEnterBackground
event eine Aufgabe mit beginBackgroundTaskWithExpirationHandler
starten sollte.
Das Problem ist, dass, wenn ich das richtig verstanden habe, dies maximal 10/15 Minuten erlaubt, nach denen die App beendet wird, wenn die Aufgabe nicht mit endBackgroundUpdateTask
beendet wird, während ich möchte, dass die Aufgabe weiter abfragt Dienst auf unbestimmte Zeit (zumindest bis der Benutzer es aus den Einstellungen der App deaktiviert)
Wie wird diese Art von Funktionalität normal ausgeführt? Gibt es einige gängige Lösungen oder Best Practices für die Lösung eines solchen Problems?
Verwenden Sie die iOS-Hintergrundabruffunktion, mit der Sie das minimale Hintergrundabrufintervall angeben können. Das tatsächliche Intervall zwischen dem nächsten Aufruf Ihres Codes wird jedoch vom iOS-Framework bestimmt. Für Details besuchen Sie diesen Link: Ссылка
Ich verwende diesen Ansatz in meiner App und denke, dass dies eine bevorzugte Vorgehensweise ist.
Sie können eine lokale Benachrichtigung verwenden, die im Hintergrund angezeigt werden kann, falls Ihre Bedingung erfüllt ist.
Richtig, iOS wird den Hintergrundprozess schließlich beenden, Sie können keine kontinuierliche Hintergrundaktivität erzwingen. Verwenden Sie die Eigenschaft backgroundTimeRemaining
, um zu überprüfen, wie viel Zeit Ihre Anwendung noch hat, und versuchen Sie, sie so elegant wie möglich zu behandeln, indem Sie endBackgroundTask
aufrufen, damit iOS Ihre App nicht zum Beenden zwingt.
Als Lösung könnten Sie Remote-Benachrichtigungen mit content-available : YES
verwenden, wodurch die didReceiveRemoteNotification
Sehen Sie sich den Parse.com an. Ihr lokaler Datenspeicher ist eine Abstraktion für das, was Sie erreichen möchten. Übrigens, ist es wirklich notwendig, im Hintergrund zu aktualisieren. Wenn der Anruf relativ schnell ist, müssen Sie erst aktualisieren, wenn der Benutzer die App öffnet. Hintergrundprozesse wie diese, die das Netz benutzen, können ziemlich Batterie verbrauchen, wenn der Benutzer nicht auf einem Wifi ist. Überlegen Sie also den Anwendungsfall sorgfältig!
Tags und Links ios background-process swift background