swift / ios aktualisiert die App-Daten im Hintergrund

8

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)

Meine Frage ist:

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?

    
chrx 18.12.2014, 13:47
quelle

3 Antworten

6

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.

    
Suresh 19.12.2014, 12:00
quelle
1
  1. Sie können eine lokale Benachrichtigung verwenden, die im Hintergrund angezeigt werden kann, falls Ihre Bedingung erfüllt ist.

  2. 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

    
MarkHim 18.12.2014 14:49
quelle
1

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!

    
user1700737 19.12.2014 11:44
quelle