3 votes

Les mises à jour en arrière-plan du gestionnaire de localisation d'iOS sont arrêtées dans iOS 10

J'ai une application de fitness qui reçoit des mises à jour de localisation et qui fonctionne bien en arrière-plan depuis iOS 4. Je viens de remarquer que les mises à jour de localisation s'arrêtent maintenant lorsque l'application passe en arrière-plan (en changeant d'application ou en verrouillant l'appareil) dans iOS 10. Je n'ai pas trouvé d'avis de modification des fonctionnalités ou des privilèges en arrière-plan ; quelqu'un sait-il ce qui se passe ?

Ma configuration est assez basique :

if (!self.locationManager) {
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;

    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    self.locationManager.distanceFilter = kCLDistanceFilterNone;

    self.locationManager.activityType = CLActivityTypeFitness;
    self.locationManager.pausesLocationUpdatesAutomatically = TRUE;
}

// request permissions on iOS 8+
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
    [self.locationManager requestWhenInUseAuthorization];
}

Ce rappel reçoit ensuite les mises à jour :

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    DLog(@"didUpdateToLocation");
}

Tout se passe bien lorsque l'application est au premier plan. Dès qu'elle passe en arrière-plan, ce message apparaît dans la console :

/BuildRoot/Library/Caches/com.apple.xbs/Sources/ExternalAccessory/ExternalAccessory-353.22.1/EAAccessoryManager.m:__52-[EAAccessoryManager _checkForConnectedAccessories:]_block_invoke-785 ending background task

Puis les mises à jour s'arrêtent. Lorsque je ramène l'application au premier plan, elles reprennent.

Je n'utilise pas directement EAAccessoryManager et je ne peux que deviner de quoi il s'agit. J'utilise le BluetoothLE pour recevoir les données des moniteurs de fréquence cardiaque, mais lorsque je désactive cette fonctionnalité (en arrêtant d'instancier un BluetoothLE ), le problème reste entier.

Mes UIBackgroundModes sont réglés sur location , external-accessory y bluetooth-central parce que j'ai aussi la connectivité de la montre Pebble. J'ai essayé d'ajouter bluetooth-peripheral mais cela n'a pas aidé. J'ai également NSLocationWhenInUseUsageDescription y NSBluetoothPeripheralUsageDescription et ceux-ci fonctionnent.

6voto

Paulw11 Points 11557

Une nouvelle propriété a été ajoutée à CLLocationManager dans iOS 9 - allowsBackgroundUpdates . Cette propriété a pour valeur par défaut false et doit être explicitement fixé à true si vous souhaitez recevoir des mises à jour de localisation en arrière-plan.

Les applications créées avec le SDK iOS 8 ont reçu grandfathered et a continué à recevoir des mises à jour en arrière-plan même sans définir cette propriété.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X