2017-07-12 3 views
2

Je construis une application pour iOS qui doit savoir quand l'utilisateur se trouve dans une plage de 20 à 30 mètres de sa maison.Les mises à jour de localisation s'arrêtent en arrière-plan - iOS

Je geofence utilisateur pour déclencher un événement lorsque l'utilisateur est à 500m de leur domicile, puis j'utilise CLLocationManager pour commencer à suivre l'emplacement réel et vérifier la distance de leur domicile. Mon problème est que lorsque j'appelle "startUpdatingLocation" de mon événement geofence alors que l'application est en arrière-plan, il ne fonctionne que pendant 20 secondes, puis arrête de donner des rappels. Si je, après les 20 secondes ont passé l'application ouverte et le remet à l'arrière-plan, puis il continue à me donner des rappels jusqu'à ce que je l'arrête. Si j'appelle "startUpdatingLocation" pendant que l'application est en cours d'exécution et la met ensuite en arrière-plan, elle continue de fonctionner comme elle le devrait.

Mon code d'initialisation ressemble à ceci:

init(config: AutounlockConfiguration) { 
    super.init() 

    self.config = config 

    self.locationManager = CLLocationManager() 

    self.locationManager.requestAlwaysAuthorization() 
    self.locationManager.requestWhenInUseAuthorization() 

    self.locationManager.delegate = self 
    self.locationManager.pausesLocationUpdatesAutomatically = false 
    self.locationManager.allowsBackgroundLocationUpdates = true 
    self.locationManager.activityType = .automotiveNavigation 
    self.locationManager.distanceFilter = kCLDistanceFilterNone 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation 
} 

et quand je commence lieu la mise à jour je le fais comme ceci:

func startFetchingUserLocation() { 
    if (!isFetchingLocation) { 
     isFetchingLocation = true 
     DanaDebugger.presentDebugPushMessage(message: "fetching new location") 
     locationManager.startUpdatingLocation() 
    } 
} 

J'ai activé le mode d'arrière-plan pour l'emplacement, et inclus la NSLocationAlwaysUsageDescription dans mon fichier info.plist. Je n'ai vraiment aucune idée d'où aller, j'espère que quelqu'un sera capable de m'aider.

Répondre

0
locationManager.startMonitoringSignificantLocationChanges() 

Utilisez cette ligne au lieu de cette ligne

locationManager.startUpdatingLocation() 

il résoudra votre problème

+0

Ou utiliser les deux; vous pouvez activer des changements de position significatifs au premier plan. Cela vous permettra alors d'appeler 'startUpdatingLocation' en arrière-plan lorsque vous êtes dans le geofence et d'obtenir des mises à jour continuelles. – Paulw11

+0

Merci beaucoup! C'était exactement la réponse dont j'avais besoin! Fonctionne parfaitement maintenant. –