Arrière-plan de Services de Localisation ne fonctionne pas sous iOS 7
J'ai récemment mis à jour mon iOS appareils à utiliser iOS 7. L'une des applications que nous développons arrière-plan utilise les services de localisation pour suivre l'emplacement de l'appareil et de tous nos testeurs ont rapporté que l'application n'apparaît plus à suivre dans l'arrière-plan sous iOS 7.
Nous avons vérifié que la semi-finition pour l'application est activée dans les paramètres de l'appareil et de la version précédente fonctionnait parfaitement sous iOS 6. Même si l'appareil a été parcouru, l'application serait de redémarrer après un emplacement de mise à jour.
Est-il autre chose qui doit être fait pour que cela fonctionne sous iOS 7?
Vous devez vous connecter pour publier un commentaire.
Voici la solution que j'ai utilisé pour obtenir continu emplacement à partir de iOS 7 appareils, peu importe, il est au premier plan ou en arrière-plan.
Vous pouvez trouver la solution complète et d'une explication de blog et aussi github:-
En arrière-plan de mise à Jour de la Programmation pour iOS 7 et 8
Github du Projet: site de référence de mise à Jour de la Programmation pour iOS 7 et 8
Méthodes et d'Explication:-
Je redémarre l'emplacement de manager toutes les 1 minutes en fonction didUpdateLocations
J'permettre la localisation gestionnaire afin d'obtenir les emplacements de l'appareil pendant 10 secondes avant de le fermer (pour économiser la batterie).
Partielle De Code Ci-Dessous:-
Mise à jour Mai 2014: j'ai eu quelques demandes pour l'ajout d'exemples de codes sur l'envoi de l'emplacement du serveur pendant un certain intervalle de temps. J'ai ajouté les codes exemples et également combiné à un correctif pour BackgroundTaskManager pour résoudre un problème technique pour l'exécution en arrière-plan sur une longue période de temps. Si vous avez des questions, vous êtes invités à vous joindre à nous pour une discussion ici: En arrière-plan de mise à Jour de la Programmation pour iOS 7 avec Emplacement de mise à Jour du Serveur de Discussion
Mise à jour janvier 2015: Si vous voulez obtenir l'emplacement de mise à jour, même lorsque l'application est suspendue, veuillez consulter: Obtenez l'Emplacement des Mises à jour de l'Application iOS, Même lorsqu'elle est Suspendue
Si vous regardez à la WWDC 2013 Session vidéo #204 - Ce qui est nouveau avec le multitâche pdf, numéro de la page 15 mentionne clairement que les applications que l'habitude de lancer en arrière-plan si l'utilisateur tue à partir de l'app switcher. Veuillez voir l'image,
Je pense qu'ils ont fait une optimisation (probablement à l'aide de détecteurs de mouvement), pour détecter les "relativement" stationnaire positionnement du téléphone et ils cesser de l'emplacement des mises à jour. Ce n'est qu'une spéculation, mais mes tests montrent actuel:
Les données que j'journal montre la géo-mises à jour arrêter de venir après ~ 15m et 30s. Avec que tout autre traitement en arrière-plan que vous faites est également terminée.
Mon appareil est un iPhone 5 avec iOS 7.
Je suis sûr à 95%, ce n'était pas le cas sur iOS 6/6.1. Où obtenir geo mises à jour avec 100 millions de précision utilisé pour vous donner assez bien continue en cours d'exécution en arrière-plan.
Mise à jour
Si vous redémarrez le directeur des lieux, toutes les 8 minutes, il doit fonctionner en permanence.
Mise à jour #2
Je n'ai pas testé cette dernière, mais c'est ainsi que j'ai repris le travail quand j'ai écrit le post. J'espère que cela est utile.
backgroundTimeRemaining
atteint zéro.[locationManager startUpdatingLocation];
en tâche de fond , quand pushnotification est appelé?Un de mes iOS application doit envoyer l'emplacement de mise à jour de serveur à intervalles réguliers et l'approche suivante a travaillé pour nous....
De départ dans iOS 7:
(startUpdatingLocation) AVANT d'avoir été backgrounded pour
admissibles pour l'arrière-plan de l'exécution
minutes
minutes backgroundTimeRemaining compte à rebours
réinitialiser le backgroundTimeRemaining
Donc, NE PAS CESSER de l'emplacement des mises à jour à tout moment...au Lieu de cela, utilisez plutôt la précision nécessaire (bel emplacement vs gros de l'emplacement). Grossier emplacement ne consomme pas beaucoup de batterie...donc cette solution permet de résoudre votre problème.
Après beaucoup de recherches en ligne, a trouvé un lien qui fournissent une solution viable pour iOS 7. La solution est comme suit:
(startUpdatingLocation) mais de définir la précision et la distance de filtres à
très sûr-grain (par exemple de 3 km) des mises à jour. Il est important de le faire
dans le premier plan (en applicationDidEnterBackground est trop tard).
la précision et la distance des filtres pour obtenir le meilleur emplacement possible, et
puis revenir en arrière pour le cours-grain valeurs, mais ne cessez jamais de
emplacement des mises à jour.
suspendu quand il passe à l'arrière plan.
Et assurez-vous d'ajouter les éléments suivants à votre demande d'Info.plist
“emplacement” à la UIBackgroundModes clé
“location de services” et “gps” à la UIRequiredDeviceCapabilities clé
Crédits: http://gooddevbaddev.wordpress.com/2013/10/22/ios-7-running-location-based-apps-in-the-background/
J'ai trouvé un autre thread Lieu de départ Gestionnaire iOS 7 de tâche en tâche de fond Ceinture mentionné que
Quelqu'un peut essayer et vérifier?
Nikolay, vous pouvez coller votre code ici? J'ai essayé de redémarrer le directeur des lieux, toutes les 8 minutes, mais il ne fonctionne pas en permanence.
Mise à jour:
Après la recherche Haute et Basse, j'ai trouvé la Solution d'Apple Forum!
Dans iOS 7, vous ne peut pas démarrer le service de localisation en arrière-plan. Si vous voulez que le service de localisation pour continuer à fonctionner en arrière-plan, vous devez démarrer en premier plan et il va continuer à s'exécuter en arrière-plan.
Si vous étiez comme moi, arrêtez le service de l'emplacement et de l'utilisation de la minuterie pour le relancer dans le fond, ça ne fonctionnera PAS.
Pour de plus amples informations, vous pouvez regarder les 8 premières minutes de la vidéo 307 de la WWDC 2013: https://developer.apple.com/wwdc/videos/
Février 2014 Mise À Jour:
Je peux obtenir l'emplacement en continu à partir d'un périphérique à l'aide de iOS 7 après plusieurs mois d'essai. Vous pouvez voir la réponse complète ici: Arrière-plan de Services de Localisation ne fonctionne pas sous iOS 7
Est l'icône sur la barre d'état est allumé? C'est un comportement étrange, j'ai eu trop.
Vérifier ma question: startMonitoringSignificantLocationchanges mais après un certain temps didUpdateLocations n'est pas appelée plus
J'ai découvert que les importantes modifications de l'emplacement est sur, mais tout simplement arrêter et redémarrer le service (pour des changements significatifs) n'était pas de tir de nouveaux emplacements.
Vous devez définir
pausesLocationUpdatesAutomatically
propriété deCLLocationManager
classe de faux pour désactiver le système de mise en pause de l'emplacement des mises à jour.