SignificantLocationChanges ne fonctionne pas depuis iOS 8

J'ai un problème avec le SignificantLocationChanges depuis la version d'iOS 8. La méthode

 [locationManager startMonitoringSignificantLocationChanges]; 

est appelé correctement après vérification de la disponibilité, les delegates fonctionnent aussi bien (je le vérifie avec la méthode didChangeAuthorizationStatus , qui fait partie du même délégué et object) et le compilateur n'a aucun doute, mais il n'y a absolument aucune mise à jour et aucune erreur de la part de didFailWithError méthode. Le journal indique que l' autorisationStatus est 4, ce qui est ok je pense.

Avant iOS 8 tout cela fonctionne très bien.

Le premier appareil de test (iPad 2 avec 3G) tourne sous iOS 7.1.2 le second (iPhone 5) 8.0.2, lorsque j'utilise la méthode startUpdatingLocation normale, je reçois des mises à jour immédiatement. Mais SignificantLocationChanges serait beaucoup mieux pour mon travail. Quelqu'un at-il une idée où l'erreur pourrait être?

Dans iOS 8 Vous devez requestr une autorisation avec le type "Toujours" pour autoriser votre application à utiliser des locations importants.

Ajoutez une nouvelle ligne dans votre file -Info.plist avec la key NSLocationAlwaysUsageDescription entrez la description de l'image ici

Puis requestz l'autorisation si elle n'est pas encore demandée.

 - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { if (status == kCLAuthorizationStatusNotDetermined && [manager respondsToSelector:@selector(requestAlwaysAuthorization)]) { [manager requestAlwaysAuthorization]; } } 

J'ai aussi des problèmes avec startMonitoringSignificantLocationChanges .

J'ai ajouté le [self.locationManager requestWhenInUseAuthorization]; et ajouté la string NSLocationWhenInUseUsageDescription au file plist.

Lorsque je lance mon application, tout fonctionne, la méthode de délégation didChangeAuthorizationStatus appelée, mais aucune activité n'est didUpdateLocation didFailWithError methods de délégation didUpdateLocation ou didFailWithError .

Mais quand je passe à startUpdatingLocation , cela fonctionne comme par magie! Mais j'ai besoin de startMonitoringSignificantLocationChanges pour travailler parce que je ne veux pas que mon application consum de la batterie pour un événement dont je n'ai pas besoin!

METTRE À JOUR!! Problème résolu!

Oh je vois pourquoi ça ne marche pas maintenant! La nouvelle reference de SDK ici dans ce lien indique;

"Vous devez appeler cette méthode ou la méthode requestAlwaysAuthorization avant d'utiliser les services de localization.Si l'user accorde l'autorisation" en cours d'utilisation "à votre application, votre application peut démarrer la plupart (mais pas tous) les services de localization alors qu'elle est au premier plan . (Les applications ne peuvent pas utiliser les services qui relancent automatiquement l'application, tels que la surveillance de la région ou le service important de changement d'location.) "

Il n'est donc pas possible d'utiliser startMonitoringSignificantLocationChanges avec [self.locationManager requestWhenInUseAuthorization]; méthode. Vous devez utiliser requestAlwaysAuthorization place!

Vous êtes-vous souvenu d'appeler la méthode

 -requestAlwaysAuthorization (or -requestWhenInUseAuthorization) 

sur votre CLLocationManager? C'est une nouvelle méthode dans iOS 8, et il est nécessaire de l'appeler avant de commencer les mises à jour de l'location.

Vérifiez également si vous -startUpdatingLocation et appelez -startUpdatingLocation sur le thread principal. Je ne suis pas sûr de celui-là, mais je pense que l'appeler sur un fil différent pourrait causer des problèmes.