J'ai lu de nombreux didacticiels sur le géofencing de mon application iOS (c'est-à-dire ici ), mais aucun ne mentionne si iOS autorise ou non la gestion des données de localisation spécifiques à l'application lorsque l'application est fermée.
Par exemple, je comprends que lorsque l'application est en arrière-plan, ces services persisteront (s'ils sont codés correctement), mais qu'en est-il lorsque l'utilisateur appuie deux fois sur le bouton d'accueil et ferme l'application? Les données de localisation peuvent-elles encore être obtenues?
Selon la documentation Apple , dans la section Utilisation des régions pour surveiller les franchissements de frontières:
Dans iOS, les régions que vous enregistrez avec le gestionnaire de localisation persistent entre les lancements de votre application. Si un croisement de région se produit alors que votre application iOS n'est pas en cours d'exécution, le système la réveille automatiquement (ou la relance) en arrière-plan afin de pouvoir traiter l'événement . Une fois relancé, toutes les régions que vous avez configurées précédemment sont rendues disponibles dans la propriété monitorRegions de tous les objets de gestionnaire d'emplacement que vous créez.
Alors oui, votre application sera réveillée (ou relancée!) Lorsque l'emplacement du système détectera que vous avez entré/quitté (selon votre configuration) la région souhaitée, donc même si votre application ne fonctionne pas bien sûr. Vous avez juste besoin de le gérer correctement dans le délégué d'application, lorsque l'application est relancée, vous obtenez une clé UIApplicationLaunchOptionsLocationKey
dans le dictionnaire d'options. Voir le lien de documentation ci-dessous pour plus de détails.
N'oubliez pas que le -startMonitoringForRegion:desiredAccuracy:
la méthode est déconseillée dans iOS 6, elle ne doit donc pas être utilisée. Utilisez plutôt -startMonitoringForRegion
.
Pour savoir comment gérer lorsque votre application est relancée à la suite d'un événement de localisation, consultez la documentation ici , cette information, comme vous le verrez, est dans la discussion de la méthode déconseillée, mais elle devrait toujours être pertinente, je crois = Apple a oublié de migrer ces informations vers la nouvelle méthode quand ils ont déprécié l'ancienne. Je leur ai signalé un bogue à ce sujet.
[~ # ~] mise à jour [~ # ~]
Apple a mis à jour la documentation de CLLocationManager suite à mon rapport de bogue. La documentation spécifie désormais pour quels types de surveillance d'emplacement l'application est lancée ou non après avoir été interrompue. Voir tilisation des services de localisation en arrière-plan
Certaines formes de mise à jour de l'emplacement nécessitent que l'application s'exécute en arrière-plan, d'autres non. Si vous souhaitez des mises à jour d'emplacement "constantes", l'application doit être exécutée en arrière-plan. Si vous ne souhaitez que des changements importants (et je pense que cela fonctionne aussi pour la surveillance des régions, bien que les documents ne soient pas aussi explicites), l'application sera relancée si elle a été arrêtée:
Si vous démarrez ce service et que votre application est par la suite terminée, le système relance automatiquement l'application en arrière-plan si un nouvel événement arrive ...
(à partir de documents CLLocationManager )
Si vous utilisez des fonctionnalités de surveillance de région, vous pouvez reprendre votre application d'une manière ou d'une autre, même si elle est fermée, généralement en créant une notification locale, de cette manière, l'utilisateur peut louer dans l'application et effectuer une tâche spécifique, en regardant le dictionnaire d'options dans -applicationDidFinishLaunchingWithOptions: