Ich habe eine App, die den Standort des Benutzers melden muss, auch wenn es im Hintergrund läuft oder sogar beendet wird (beendet). Das Problem ist, dass die App den Standort nicht seltener als 1 Stunde Intervall melden sollte.
Ich verwende eine signifikante Standortänderung (SLC), um alle Bewegungen zu verfolgen, was ziemlich ausreichend ist, wenn der Benutzer unterwegs ist, aber sobald der Benutzer aufhört, werden keine weiteren Aktualisierungen ausgelöst und die App hat keine Gelegenheit, einen neuen Standort zu übermitteln (während der Benutzer bleibt) in der gleichen Gegend, aber ohne SLC).
Um diesen Fall zu erfassen, benutze ich die Hintergrundabruffunktion, um regelmäßig Updates im Hintergrund auch ohne SLC zu senden. Das Problem hier ist, dass Hintergrundabrufe oft verwendet wurden (alle 20-30 Minuten, seitdem ich sie in einer anderen iOS 7.x App benutzt habe), aber jetzt mit iOS8 / iOS9 kann ich sie nur einmal am Tag bekommen, was nicht akzeptabel ist in meinem Fall. Ich habe viele Tests durchgeführt, eine einfache Hintergrundabruf-App entwickelt, die beim Abruf eine lokale Benachrichtigung hinzufügt. Kein Glück, um es zu zwingen, öfter zu arbeiten.
Hier ist mein AppDelegate:
%Vor%Alles, was hier getan wird, ist das Hinzufügen einer lokalen Benachrichtigung bei jedem Abruf im Hintergrund. Ich beende immer die Hintergrundausführung mit UIBackgroundFetchResultNewData.
Haben Sie Vorschläge, wie Sie Hintergrundabrufe häufiger zur Arbeit zwingen (oder Links nachweisen, die nicht mehr möglich sind)? Irgendwelche alternativen Lösungen, um meine Anforderung zu erfüllen, sind auch willkommen!
Es hat sich herausgestellt, dass die Hintergrundabrufe in iOS sehr davon abhängen, was Sie innerhalb des Handlers tun, insbesondere die Netzwerkaktivität. Hier ist die Liste der Abhängigkeiten, die Sie versuchen sollten zu verstehen, ob und wie oft iOS Ihr Fetch ausführen wird:
Apps, die kleine Mengen von Inhalten schnell und genau herunterladen Reflektieren, wann sie Inhalte zum Herunterladen zur Verfügung hatten, sind wahrscheinlicher um in Zukunft Ausführungszeit zu erhalten, als Apps, die lange brauchen Zeit, um den Inhalt herunterzuladen, oder , dass der Inhalt des Anspruchs verfügbar war aber dann nichts herunterladen.
Der letzte Punkt erwies sich in meinem Fall als entscheidend, weil ich zu Testzwecken Abrufe deklarierte und nie versuchte, etwas herunterzuladen. Sobald ich begonnen habe, Netzwerk in der Handler zu verwenden, funktionieren Hintergrundabrufe alle 15-30 Minuten wie erwartet.
Apple-Dokumentation: Ссылка
Tags und Links iphone ios locationmanager