Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   iOS App - TTask im Hintergrund (https://www.delphipraxis.net/189581-ios-app-ttask-im-hintergrund.html)

NickD 27. Jun 2016 10:50

iOS App - TTask im Hintergrund
 
Hallo zusammen,
ich habe aktuelle eine App die sich mit einem Datasnap Server verbindet, welcher Daten zur Verfügung stellt, die in einer lokalen Datenbank in der App gespeichert werden.
Die Abfrage sowie das Eintragen der Daten in die lokale Datenbank, werden über TTasks gemacht.

Das Problem beginnt, sobald die App in den Hintergrund gelegt wird:
Unter Android funktioniert dies ohne Probleme. Der Task läuft solange, bis alle Daten abgefragt und eingetragen wurden.
Bei iOS stoppt der Task mit der Ausführung nach etwa 10 Sekunden, nachdem die App in den Hintergrund gelegt wurde.
Zwar wird dieser weiter ausgeführt nachdem die App wieder in den Vordergrund kommt, jedoch sollte dies auch im Hintergrund weiterlaufen.

Ich habe mich dazu auf verschiedenen Blogs und Foren informiert bezüglich Background Mode "Fetch". Dieser lässt aber eine Ausführung nur für 30 weitere Sekunden zu, soweit ich die Informationen richtig verstanden habe.
Desweiteren habe ich mir verschieden Möglichkeiten angesehen, z.B. einen Background Task Manager. Dieser bringt auf den neuen iOS Versionen jedoch eine Zugriffsverletzung.
Dann habe ich noch folgendes dazu gefunden: Eine Audiodatei im Hintergrund abzuspielen, welche gestoppt wird, sobald die synchronisierung mit dem Datasnap Server fertig ist. Dies wird jedoch niemals durch die Prüfung bei Apple kommen. Außerdem klingt das nach einer völlig unsauberen "Lösung" des Problems.

Die Synchronisierung kann durchaus auch mal > 10 Minuten betragen, je nach Verbindungsqualität des mobilen Gerätes.

Ich hoffe Ihr habt Vorschläge bzw. wisst ob dies überhaupt möglich ist.

Mit freundlichen Grüßen
Nick.

pertzschc 27. Jun 2016 10:55

AW: iOS App - TTask im Hintergrund
 
Bei iOS musst Du Deiner App die Rechte geben, im Hintergrund weiter zu arbeiten. Nennt sich in den Einstellungen "Hintergrundaktualisierung". Diese muss für Deine App angeschaltet sein und Deine App sollte diese Rechte beim Benutzer anfordern, wenn sie nicht gesetzt sein.
Grüße, Christoph

NickD 27. Jun 2016 11:00

AW: iOS App - TTask im Hintergrund
 
Diese Einstellung ist für die App getroffen worden, zwar Manuell über die Einstellungen ohne Aufforderung, jedoch sollte das ja keinen Unterschied machen oder?
Trotzdem wird der Task gestoppt, bis die App wieder in den Vordergrund kommt.

bra 27. Jun 2016 13:28

AW: iOS App - TTask im Hintergrund
 
Wir haben bei uns in der App auch nur den Background-Fetch (max. 30 Sekunden Zeit) drin, was besseres haben wir leider nicht gefunden. Wir geben dann einfach eine Benachrichtigung aus, dass neue Daten vorhanden sind.

Wenn man richtige Hintergrund-Downloads will, muss man die systemeigenen Download-Routinen verwenden, wo ich aber erstens keinerlei Beispiele für Delphi gefunden habe und zweitens das für unsere App vermutlich eh nicht praktikabel wäre.

Falls die App beim Background-Fetch abstürzt, hast du entweder irgendwelche Aktualisierungen der GUI drin, oder wie in unserem Fall, du greifst auf Dateien zu. Im Hintergrund wird bei einem verschlüsselten iOS-Gerät der Zugriff auf Dateien ebenfalls gesperrt.

NickD 27. Jun 2016 14:29

AW: iOS App - TTask im Hintergrund
 
Ok. Danke schon mal für die Antworten.

Bei Android ist dies alles kein Problem, dort kann die App im Hintergrund zeitlich unbegrenzt Daten downloaden.
Wobei dies jetzt ab Android 6 auch nicht mehr ohne Weiteres möglich ist. (Doze Mode und App Standby Mode).

Dann werde ich wohl bei iOS auf vollständige Hintergrundaktualisierungen verzichten müssen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz