Share via


Lignes directrices pour les applications prenant en compte la géolocalisation

API importantes

Cette rubrique décrit les directives en matière de performances pour les applications qui nécessitent l’accès à la localisation d’un utilisateur.

Recommandations

  • Commencez à utiliser l’objet de localisation uniquement lorsque l’application nécessite des données de localisation.

    Appelez RequestAccessAsync avant d’accéder à la position de l’utilisateur. À ce stade, votre application doit être au premier plan et l’élément RequestAccessAsync doit être appelé à partir du thread d’interface utilisateur. Jusqu’à ce que l’utilisateur l’y autorise, votre application ne peut pas accéder aux données d’emplacement.

  • Si la localisation n’est pas essentielle à votre application, n’y accédez pas tant que l’utilisateur n’essaie pas d’accomplir une tâche qui le nécessite. Par exemple, si une application de réseau social dispose d’un bouton "Vérifier ma position", l’application ne doit pas accéder à la position tant que l’utilisateur n’a pas cliqué sur le bouton. Il n’y a pas de problème à accéder immédiatement à la localisation si elle est nécessaire à la fonction principale de votre application.

  • La première utilisation de l’objet Geolocator doit avoir lieu dans le fil d’exécution principal de l’application au premier plan, afin de déclencher la demande de consentement à l’utilisateur. La première utilisation du Geolocator peut être soit le premier appel à getGeopositionAsync, soit le premier enregistrement d’un gestionnaire pour l’événement positionChanged.

  • Indiquez à l’utilisateur comment les données de localisation seront utilisées.

  • Fournissez une interface utilisateur permettant aux utilisateurs de rafraîchir manuellement leur position.

  • Affichez une barre de progression ou un anneau pendant l’attente des données de localisation.

  • Affichez des messages d’erreur ou des boîtes de dialogue appropriés lorsque les services de localisation sont désactivés ou non disponibles.

    Si les paramètres de localisation ne permettent pas à votre application d’accéder à la position de l’utilisateur, nous vous recommandons de fournir un lien pratique vers les paramètres de confidentialité de la localisation dans l’application Paramètres. Par exemple, vous pouvez utiliser un contrôle Hyperlink ou appeler la méthode LaunchUriAsync pour lancer l’application Paramètres à partir du code en utilisant l’URI ms-settings:privacy-location. Pour plus d’informations, voir Lancer l’application Paramètres de Windows.

  • Effacez les données de localisation mises en cache et libérez le Geolocator lorsque l’utilisateur désactive l’accès aux informations de localisation.

    Libérez l’objet Geolocator si l’utilisateur désactive l’accès aux informations de localisation dans les Paramètres. L’application recevra alors les résultats ACCESS_DENIED pour tout appel à l’API de localisation. Si votre application enregistre ou met en cache des données de localisation, effacez toutes les données mises en cache lorsque l’utilisateur révoque l’accès aux informations de localisation. Proposez un autre moyen de saisir manuellement les informations de localisation lorsque les données de localisation ne sont pas disponibles via les services de localisation.

  • Fournissez une interface utilisateur pour réactiver les services de localisation. Par exemple, proposez un bouton d’actualisation qui réinstaure l’objet Geolocator et tente d’obtenir à nouveau les informations de localisation.

    Faites en sorte que votre application fournisse une interface utilisateur pour réactiver les services de localisation.

    • Si l’utilisateur réactive l’accès aux services de localisation après l’avoir désactivé, l’application n’en est pas informée. La propriété status ne change pas et il n’y a pas d’événement statusChanged. Votre application doit créer un nouvel objet Geolocator et appeler getGeopositionAsync pour tenter d’obtenir des données de localisation actualisées, ou s’abonner à nouveau aux événements positionChanged. Si l’état indique que la localisation a été réactivée, effacez toute interface utilisateur par laquelle votre application a précédemment informé l’utilisateur que les services de localisation étaient désactivés, et répondez de manière appropriée au nouvel état.
    • Votre application doit également réessayer d’obtenir des données de localisation lors de l’activation, ou lorsque l’utilisateur tente explicitement d’utiliser une fonction nécessitant des informations de localisation, ou à tout autre moment approprié.

Niveau de performance

  • Utilisez des requêtes de localisation ponctuelles si votre application n’a pas besoin de recevoir des mises à jour de localisation. Par exemple, une application qui ajoute une balise de localisation à une photo n’a pas besoin de recevoir des applications de mise à jour de la localisation. Elle doit plutôt faire une requête de localisation à l’aide de getGeopositionAsync, comme décrit dans Obtenir la position actuelle.

    Lorsque vous effectuez une requête de localisation ponctuelle, vous devez définir les valeurs suivantes.

    • Spécifiez la précision demandée par votre application en définissant le paramètre DesiredAccuracy ou le paramètre DesiredAccuracyInMeters. Vous trouverez ci-dessous des recommandations sur l’utilisation de ces paramètres :
    • Définissez le paramètre max age de GetGeopositionAsync pour indiquer depuis combien de temps une position peut avoir été obtenue pour être utile à votre application. Si votre application peut utiliser une position datant de quelques secondes ou minutes, elle peut recevoir une position presque immédiatement et contribuer à économiser l’énergie de l’appareil.
    • Définissez le paramètre timeout de GetGeopositionAsync. Il s’agit de la durée pendant laquelle votre application peut attendre le retour d’une position ou d’une erreur. Vous devrez trouver un compromis entre la réactivité pour l’utilisateur et la précision dont votre application a besoin.
  • Utilisez la session de localisation continue lorsque des mises à jour fréquentes de la position sont nécessaires. Utilisez les événements positionChanged et statusChanged pour détecter un mouvement au-delà d’un seuil spécifique ou pour des mises à jour continues de la position au fur et à mesure qu’elles se produisent.

    Lorsque vous demandez des mises à jour de la position, vous pouvez spécifier la précision requise par votre application en définissant DesiredAccuracy (précision souhaitée) ou DesiredAccuracyInMeters (précision souhaitée en mètres). Vous devez également définir la fréquence à laquelle les mises à jour de l’emplacement sont nécessaires, en utilisant le MovementThreshold (seuil de mouvement) ou le ReportInterval (intervalle de rapport).

    • Spécifiez le seuil de mouvement. Certaines applications ne nécessitent des mises à jour de localisation que lorsque l’utilisateur s’est déplacé sur une grande distance. Par exemple, une application qui fournit des informations locales ou des mises à jour météorologiques peut ne pas avoir besoin de mises à jour de l’emplacement à moins que l’emplacement de l’utilisateur n’ait changé de ville. Dans ce cas, vous pouvez ajuster le mouvement minimum requis pour un événement de mise à jour de l’emplacement en définissant la propriété MovementThreshold. Cela a pour effet de filtrer les événements PositionChanged. Ces événements ne sont déclenchés que lorsque le changement de position dépasse le seuil de mouvement.

    • Utilisez reportInterval qui s’aligne sur l’expérience de votre application et qui minimise l’utilisation des ressources du système. Par exemple, une application météorologique peut nécessiter une mise à jour des données toutes les 15 minutes. La plupart des applications, autres que les applications de navigation en temps réel, n’ont pas besoin d’un flux constant et extrêmement précis de mises à jour de la position. Si votre application n’a pas besoin du flux de données le plus précis possible, ou si elle ne nécessite pas de mises à jour fréquentes, définissez la propriété ReportInterval pour indiquer la fréquence minimale des mises à jour de l’emplacement dont votre application a besoin. La source de localisation peut alors économiser de l’énergie en ne calculant la localisation qu’en cas de besoin.

      Les applications qui ont besoin de données en temps réel doivent définir ReportInterval sur 0, pour indiquer qu’aucun intervalle minimum n’est spécifié. L’intervalle de rapport par défaut est d’une seconde ou aussi fréquent que le matériel peut le supporter, selon ce qui est le plus court.

      Les appareils qui fournissent des données de localisation peuvent suivre l’intervalle de rapport demandé par différentes applications et fournir des rapports de données à l’intervalle le plus court demandé. L’application qui a le plus besoin de précision reçoit donc les données dont elle a besoin. Il est donc possible que le fournisseur de données de localisation génère des mises à jour à une fréquence plus élevée que celle demandée par votre application, si une autre application a demandé des mises à jour plus fréquentes.

      Remarque Il n’est pas garanti que la source de localisation honorera la requête pour l’intervalle de rapport donné. Tous les appareils des fournisseurs de localisation ne suivent pas l’intervalle de rapport, mais vous devez tout de même le fournir à ceux qui le font.

    • Pour économiser de l’énergie, définissez la propriété desiredAccuracy pour indiquer à la plateforme de localisation si votre application a besoin de données de haute précision. Si aucune application n’a besoin de données de haute précision, le système peut économiser de l’énergie en n’activant pas les fournisseurs de GPS.

      • Attribuez la valeur HIGH à la propriété desiredAccuracy pour permettre au GPS d’acquérir des données.
      • Réglez desiredAccuracy sur Default et n’utilisez qu’un modèle d’appel unique pour minimiser la consommation d’énergie si votre application utilise les informations de localisation uniquement pour le ciblage publicitaire.

      Si votre application a des besoins spécifiques en matière de précision, vous pouvez utiliser la propriété DesiredAccuracyInMeters au lieu de DesiredAccuracy. Cette propriété est particulièrement utile sur Windows Phone, où la position peut généralement être obtenue à partir de balises cellulaires, de balises Wi-Fi et de satellites. Le choix d’une valeur de précision plus spécifique aidera le système à identifier les bonnes technologies à utiliser avec le coût énergétique le plus bas lors de la fourniture d’une position.

      Par exemple :

      • Si votre application obtient une position pour la diffusion d’applications, la météo, les actualités, etc., une précision de 5 000 mètres est généralement suffisante.
      • Si votre application affiche des applications dans le voisinage, une précision de 300 mètres est généralement suffisante pour fournir des résultats.
      • Si l’utilisateur cherche des recommandations pour des restaurants à proximité, nous voulons probablement obtenir une position à l’intérieur d’un pâté de maisons, une précision de 100 mètres est donc suffisante.
      • Si l’utilisateur essaie de partager sa position, l’application devrait demander une précision d’environ 10 mètres.
    • Utilisez la propriété Geocoordinate.accuracy si votre application a des exigences spécifiques en matière de précision. Par exemple, les applications de navigation doivent utiliser la propriété Geocoordinate.accuracy pour déterminer si les données de localisation disponibles répondent aux exigences de l’application.

  • Tenez compte du délai de démarrage. La première fois qu’une application demande des données de localisation, il peut y avoir un court délai (1 à 2 secondes) pendant que le fournisseur de localisation démarre. Tenez-en compte dans la conception de l’interface utilisateur de votre application. Par exemple, vous voudrez peut-être éviter de bloquer d’autres tâches en attendant la fin de l’appel à GetGeopositionAsync.

  • Tenez compte du comportement en arrière-plan. Si votre application n’est pas au premier plan, elle ne recevra pas les événements de mise à jour de l’emplacement pendant qu’elle est suspendue en arrière-plan. Si votre application suit les applications en les journalisant, tenez-en compte. Lorsque l’application est à nouveau au premier plan, elle ne reçoit que les nouveaux événements. Elle ne reçoit pas les mises à jour qui se sont produites lorsqu’elle était inactive.

  • Utilisez efficacement les capteurs bruts et les capteurs de fusion. Il existe deux types de capteurs : les capteurs bruts et les capteurs de fusion.

    • Les capteurs bruts comprennent l’accéléromètre, le gyromètre et le magnétomètre.
    • Les capteurs de fusion comprennent l’orientation, l’inclinomètre et la boussole. Les capteurs de fusion obtiennent leurs données à partir de combinaisons de capteurs bruts.

    Les API d’exécution Windows peuvent accéder à tous ces capteurs, à l’exception du magnétomètre. Les capteurs de fusion sont plus précis et plus stables que les capteurs bruts, mais ils consomment plus d’énergie. Vous devez utiliser les bons capteurs pour le bon usage. Pour plus d’informations, consultez la section Capteurs.

Veille connectée

  • Lorsque le PC est en état de veille connectée, les objets Geolocator peuvent toujours être instanciés. Cependant, l’objet Geolocator ne trouvera aucun capteur à agréger et, par conséquent, les appels à GetGeopositionAsync expireront au bout de 7 secondes, les auditeurs d’événements PositionChanged ne seront jamais appelés et les auditeurs d’événements StatusChanged seront appelés une fois avec l’état NoData.

Indications d’utilisation supplémentaires

Détection des changements dans les paramètres de localisation

L’utilisateur peut désactiver la fonctionnalité de localisation en utilisant les paramètres de confidentialité de la localisation dans l’application Paramètres.

  • Pour détecter la désactivation ou la réactivation des services de localisation par l’utilisateur, procédez comme suit :
    • Gérez l’événement StatusChanged. La propriété Status de l’argument de l’événement StatusChanged a la valeur Disabled si l’utilisateur désactive les services de localisation.
    • Vérifiez les codes d’erreur renvoyés par GetGeopositionAsync. Si l’utilisateur a désactivé les services de localisation, les appels à GetGeopositionAsync échouent avec une erreur ACCESS_DENIED et la propriété LocationStatus a la valeur Disabled.
  • Si vous avez une application pour laquelle les données de localisation sont essentielles – par exemple, une application de cartographie -, assurez-vous de faire ce qui suit :
    • Gérez l’événement PositionChanged pour obtenir des mises à jour si l’emplacement de l’utilisateur change.
    • Gérez l’événement StatusChanged comme décrit précédemment, afin de détecter les changements dans les paramètres de localisation.

Notez que le service de localisation renvoie les données dès qu’elles sont disponibles. Il peut d’abord renvoyer une position avec un plus grand rayon d’erreur, puis mettre à jour la position avec des informations plus précises au fur et à mesure qu’elles sont disponibles. Les applications affichant la position de l’utilisateur devraient normalement mettre à jour la position au fur et à mesure que des informations plus précises sont disponibles.

Représentations graphiques de la position

Demandez à votre application d’utiliser Geocoordinate.accuracy pour indiquer clairement la position actuelle de l’utilisateur sur la carte. Il existe trois bandes principales de précision : un rayon d’erreur d’environ 10 mètres, un rayon d’erreur d’environ 100 mètres et un rayon d’erreur de plus d’un kilomètre. En utilisant les informations de précision, vous pouvez vous assurer que votre application affiche l’emplacement avec précision dans le contexte des données disponibles. Pour obtenir des informations générales sur l’utilisation de la commande de carte, reportez-vous à la section Afficher des cartes avec des vues en 2D, en 3D et à côté des rues.

  • Pour une précision approximativement égale à 10 mètres (résolution GPS), l’emplacement peut être indiqué par un point ou une épingle sur la carte. Avec cette précision, les coordonnées de latitude et de longitude ainsi que l’adresse de la rue peuvent également être affichées.

    exemple de carte affichée avec une précision GPS d’environ 10 mètres.

  • Pour une précision comprise entre 10 et 500 mètres (environ 100 mètres), la localisation est généralement obtenue grâce à la résolution Wi-Fi. La localisation obtenue à partir d’un téléphone cellulaire a une précision d’environ 300 mètres. Dans ce cas, nous recommandons que votre application affiche un rayon d’erreur. Pour les applications qui indiquent des directions nécessitant un point de centrage, ce point peut être affiché avec un rayon d’erreur qui l’entoure.

    Exemple de carte affichée avec une précision wi-fi d’environ 100 mètres.

  • Si la précision renvoyée est supérieure à 1 kilomètre, vous recevez probablement des informations de localisation avec une résolution au niveau de l’adresse IP. Ce niveau de précision est souvent trop faible pour localiser un point particulier sur une carte. Votre application doit effectuer un zoom avant au niveau de la ville sur la carte, ou dans la zone appropriée en fonction du rayon d’erreur (par exemple, au niveau de la région).

    Exemple de carte affichée avec une précision wi-fi d’environ 1 kilomètre.

Lorsque la précision de la localisation passe d’une bande de précision à une autre, assurez une transition harmonieuse entre les différentes représentations graphiques. Pour ce faire, vous pouvez :

  • L’animation de la transition doit être douce et la transition rapide et fluide.
  • Attendez quelques rapports consécutifs pour confirmer le changement de précision, afin d’éviter les zooms intempestifs et trop fréquents.

Représentations textuelles de la localisation

Certains types d’applications, par exemple une application météo ou une application d’informations locales, ont besoin de moyens pour représenter textuellement la localisation aux différentes bandes de précision. Veillez à afficher la position clairement et uniquement jusqu’au niveau de précision fourni par les données.

  • Pour une précision approximativement égale à 10 mètres (résolution GPS), les données de localisation reçues sont assez précises et peuvent donc être communiquées au niveau du nom du quartier. Le nom de la ville, de l’État ou de la province et le nom du pays ou de la région peuvent également être utilisés.
  • Pour une précision approximativement égale à 100 mètres (résolution Wi-Fi), les données de localisation reçues sont moyennement précises et nous vous recommandons donc d’afficher les informations jusqu’au nom de la ville. Évitez d’utiliser le nom du quartier.
  • Pour une précision supérieure à 1 kilomètre (résolution IP), affichez uniquement le nom de l’État ou de la province, ou le nom du pays/de la région.

Considérations relatives à la confidentialité

L’emplacement géographique d’un utilisateur est une information personnelle identifiable (IPI). Le site Web suivant fournit des conseils pour protéger la vie privée des utilisateurs.