J'essaie de créer une application iOS simple qui suivra en permanence l'emplacement en arrière-plan et notifiera avec une grande précision lorsque l'utilisateur est entré dans une région spécifique (ne pas utiliser la surveillance de région pas précis ou assez rapide pour ce que je veux).Mise à jour continue de l'emplacement iOS en arrière-plan
Cette application fonctionne bien au premier plan, mais une fois que je passe en arrière-plan, cela ne fonctionne pas.
J'ai créé une application de test pour étudier le fonctionnement des mises à jour d'emplacement d'arrière-plan. J'ai fait une application simple qui imprime juste un message quand une mise à jour d'emplacement se produit (dans le journal). Ce que je vois, c'est qu'en mode premier plan, les mises à jour ont lieu comme prévu, mais lorsque je verrouille mon téléphone et que l'application passe en arrière-plan, les mises à jour se font environ 30 secondes, puis s'arrêtent. Il n'y a aucune mention dans les docs d'Apple (que je peux trouver) expliquant ce comportement.
Je me suis assuré que j'autorisé le traitement de fond dans le info.plist (fait dans les « capacités » -> « modes de fond » -> « mises à jour de localisation »)
Voici le code que j'utilisé pour tester ceci:
import UIKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
let locationManager = CLLocationManager()
var counter = 0
override func viewDidLoad() {
super.viewDidLoad()
// configure location updates
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.distanceFilter = 0.1
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("location updated! \(counter)")
counter = counter + 1
}
Des idées sur ce que je pourrais manquer? J'ai essayé différents paramètres de précision de localisation (tels que BestForNavigation, etc.) et aucun changement.
Merci.
Je voulais préciser que pour tester les mises à jour de localisation en arrière-plan la déclaration d'impression ne fonctionne pas (cela fonctionne uniquement en imprimant sur le Mac lorsque l'application est au premier plan). Pour le tester, j'ai ajouté du code pour envoyer une notification locale à l'intérieur de didUpdateLocations. Quand je suis passé en arrière-plan, cela m'a envoyé une notification chaque fois que l'emplacement a été mis à jour. J'ai reçu des notifications pendant environ 30 secondes après le passage en arrière-plan, puis ils se sont arrêtés. – Morocco5
En outre, pour être clair, j'ai autorisé le mode de traitement en arrière-plan pour l'emplacement dans info.plist – Morocco5