CLLocationManager geo-fencing / startMonitoringForRegion: vs startMonitoringForSignificantLocationChanges: par rapport aux appels startUpdating de 10 minutes

J'essaye de mettre en place une application qui sera capable de vérifier les locations des personnes en arrière-plan, de voir si elles sont à un endroit donné et d'envoyer un ping à un server si elles le sont. Nous ne voulons pas drainer l'énergie de nos users, nous essayons donc de find la meilleure solution.

J'ai beaucoup lu et je n'ai pas trouvé beaucoup d'informations sur ces methods. Je vais passer en revue les avantages et les inconvénients tels que je les comprends en ce moment

startMonitoringForSignificantChanges

Description: Basé sur des changements de wi-fi et de tour de cellule le système réveille l'application.

Docs :

Les applications peuvent s'attendre à recevoir une notification dès que l'appareil se déplace de 500 mètres ou plus à partir de sa notification précédente. Il ne devrait pas s'attendre à des notifications plus fréquemment qu'une fois toutes les cinq minutes. Si le périphérique est capable de récupérer des données à partir du réseau, le gestionnaire de position est beaucoup plus susceptible de délivrer des notifications en time opportun.

Avantages:

  • La plupart des batteries efficaces

Les inconvénients:

  • Dépend des changements Wi-Fi / tour de la cellule
  • Peut seulement supposer que cela sera appelé tous les 200m à 2km (sinon plus dans certaines zones)
  • Plus sur la précision
  • Ainsi, incohérent et imprécis

Mise à jour de 10 minutes ou " mise à jour de n minutes":

Description: Cela request essentiellement à l'application plus de time, lorsque ce timeout supplémentaire est sur le point d'expirer, elle appelle [self.locationManager startUpdating], récupère l'location et étend le thread d'arrière-plan pendant 10 minutes de plus.

Avantages:

  • Cohérent
  • Peut être aussi précis que vous le voulez aussi constant que vous le voulez

Les inconvénients:

  • A faire un appel toutes les dix minutes ou less pour que l'application fonctionne en arrière-plan (n ne peut pas être supérieur à 10 pour les appels)

Questions: Quel effet cela at-il sur la batterie? Est-ce que se réveiller le GPS et l'éteindre blessent plus la batterie? Je ne pouvais pas imaginer courir un bref contrôle de l'location en arrière-plan permettrait de vider la batterie autant … mais encore une fois, je ne sais pas ce qui se passe dans la mise sous tension du GPS et d'get un signal utilisable.

startMonitoringForRegion (géo-délimitation):

En termes simples, votre application est réveillée lorsque vous entrez dans une région prédéfinie. C'est le plus bizarre d'entre eux, il est plus récent et il y a less de documentation à ce sujet. Je ne peux pas find une bonne description de la façon dont le «système surveille» le passage des frontières. Pour tout ce que je sais c'est un algorithm vraiment intelligent, ou ils sont constamment ping sur le GPS qui le rendrait less efficace que les autres methods pour le faire.

Avantages:

  • Mise en œuvre simple
  • Géré par le système, vous n'avez donc pas besoin d'inventer vos propres géo-barrières ad hoc. Seuils triggersurs au franchissement des frontières … pas de données inutiles à jeter en échange d'un coup de batterie
  • Ainsi, devrait être le meilleur pour ce genre de chose, précis, géré par le système

Les inconvénients:

  • Les gens remettent en question son efficacité
  • D'énormes conflits sur la question de savoir si c'est bon pour la vie de la batterie ou si elle draine terriblement la vie de la batterie.
  • Comment le système surveille-t-il cela?
  • Fondamentalement, comportement indéterminé.

Je suppose que ma question se résume à la façon dont startMonitoringForRegion: comparer à ces autres methods de tester la localization de l'user en arrière-plan quand il s'agit de la vie de la batterie, la cohérence et la précision. Est-ce que quelqu'un a complètement testé cela? Ou utilisé dans leur application et obtenu au less quelques commentaires? Probablement, pour mes fins, le compromis est entre geo-fencing et la méthode de mise à jour de 10 minutes. (Etant donné ce que Apple a dit publiquement à propos d'iOS7, il y aura quelques tâches de fond … cela changera-t-il le calcul pour le compromis entre ces deux methods?) Quelqu'un a-t-il une idée de la comparaison?

Merci beaucoup! Dans l'attente de voir si nous pouvons aller au fond de la façon de comparer ces methods.

J'ai travaillé sur le suivi des véhicules en utilisant le GPS pendant 2 ans. J'ai appris beaucoup de choses à la dure … Selon mon expérience, startMonitoringForRegion ou Geo-fencing dépend des events de changement de cellule, didEnter ou des events didExit ne se triggersnt pas tant qu'il n'y a pas d'événement de changement de cellule / wifi. Donc, cela ne fait aucune différence par rapport à la consommation de la batterie. Cependant, il fait un calcul supplémentaire qui dépend du nombre de régions actuellement surveillées. Même l'application de callback d'Apple ne donne pas de bons résultats pour les callbacks basés sur la localization, car il utilise la géo-escrime.

L'autre approche démarrage GPS pendant n minutes après chaque m-minutes est une bonne option, il ne devrait pas affecter la vie de la batterie, si elle est faite judicieusement. Ce qui affecte exactement la batterie est l'activation constante du GPS en mode haute précision. Comme par exemple Si vous activez le GPS avec kCLLocationAccuracyBest et distance-filter = 0, vous pouvez littéralement observer le drainage de la batterie et bientôt votre appareil commencera également à devenir plus chaud.

Si j'étais vous, je voudrais activer GPS toutes les 10 minutes pendant 5 sec avec kCLLocationAccuracyBest (ou peut kCLLocationAccuracyNearestTenMeters pour utiliser less de batterie, si la précision n'est pas si importante) et distance-filter = 5 (mètres). La consommation de la batterie dans ce cas sera imperceptible. Vous pouvez jouer avec des parameters similaires qui peuvent répondre à votre cas spécifique et finalement découvrir ce qui vous convient le mieux.

BTW: iPhone utilise AGPS, A-GPS utilise en outre les ressources du réseau pour localiser et utiliser les satellites dans des conditions de signal pauvres. Ainsi, lorsque vous lancerez startUpdatingLocation, vous utiliserez également les informations de la tour de téléphonie cellulaire à proximité. voir http://en.wikipedia.org/wiki/Assisted_GPS