Рекомендации по приложениям с поддержкой расположения

Важные API

В этом разделе описаны рекомендации по производительности приложений, которым требуется доступ к расположению пользователя.

Рекомендации

  • Начните использовать объект расположения только в том случае, если приложению требуются данные о расположении.

    Вызовите RequestAccessAsync перед доступом к расположению пользователя. В то время приложение должно находиться на переднем плане и RequestAccessAsync должно вызываться из потока пользовательского интерфейса. Пока пользователь не предоставит приложению разрешение на свое расположение, приложение не сможет получить доступ к данным о расположении.

  • Если расположение не является важным для приложения, не получите доступ к нему, пока пользователь не попытается выполнить задачу, требующую ее. Например, если у приложения социальной сети есть кнопка "Войти с моим расположением", приложение не должно получить доступ к расположению, пока пользователь не нажимает кнопку. Это нормально немедленно получить доступ к расположению, если это необходимо для основной функции вашего приложения.

  • Первое использование объекта Geolocator должно быть сделано в основном потоке пользовательского интерфейса приложения переднего плана, чтобы активировать запрос согласия для пользователя. Первое использование геолокатора может быть первым вызовом getGeopositionAsync или первой регистрацией обработчика для события positionChanged.

  • Сообщите пользователю, как будут использоваться данные расположения.

  • Предоставьте пользовательский интерфейс, чтобы пользователи могли вручную обновить свое расположение.

  • Отображение индикатора выполнения или кольца во время ожидания получения данных о расположении.

  • Отображение соответствующих сообщений об ошибках или диалоговых окон при отключении или недоступности служб расположения.

    Если параметры расположения не позволяют приложению получать доступ к расположению пользователя, рекомендуется предоставить удобную ссылку на параметры конфиденциальности расположения в приложении Параметры. Например, можно использовать элемент управления Гиперссылки или вызвать метод LaunchUriAsync для запуска приложения Параметры из кода с помощью ms-settings:privacy-location URI. Дополнительные сведения см. в разделе "Запуск приложения Параметры Windows".

  • Снимите кэшированные данные о расположении и отпустите геолокатор , когда пользователь отключает доступ к сведениям о расположении.

    Отпустите объект геолокатора, если пользователь отключает доступ к сведениям о расположении через Параметры. Затем приложение получит ACCESS_DENIED результаты для вызовов API расположения. Если приложение сохраняет или кэширует данные о расположении, снимите все кэшированные данные, когда пользователь отменяет доступ к сведениям о расположении. Укажите альтернативный способ вручную ввести сведения о расположении, если данные расположения недоступны через службы расположения.

  • Укажите пользовательский интерфейс для повторного определения служб расположения. Например, укажите кнопку обновления, которая повторно создает объект геолокатора и пытается снова получить сведения о расположении.

    Укажите пользовательский интерфейс приложения для повторной настройки служб расположения.

    • Если пользователь повторно использует доступ к расположению после отключения, уведомление о приложении отсутствует. Свойство состояния не изменяется, и событие statusChanged отсутствует. Приложение должно создать новый объект Геолокатора и вызвать getGeopositionAsync, чтобы попытаться получить обновленные данные расположения или подписаться еще раз на события positionChanged. Если состояние указывает, что расположение было повторно изменено, очистите любой пользовательский интерфейс, с помощью которого ваше приложение ранее уведомило пользователя об отключении служб расположения и соответствующим образом отвечает на новое состояние.
    • Приложение также должно повторить попытку получить данные о расположении при активации или когда пользователь явно пытается использовать функции, требующие сведений о расположении или в любое другое время.

Производительность

  • Используйте запросы одноразового расположения, если приложению не нужно получать обновления расположения. Например, приложение, которое добавляет тег расположения к фотографии, не требуется получать события обновления расположения. Вместо этого он должен запрашивать расположение с помощью getGeopositionAsync, как описано в разделе Get current location.

    При выполнении запроса на одноразовое расположение следует задать следующие значения.

    • Укажите точность, запрошенную приложением, задав DesiredAccuracy или DesiredAccuracyInMeters. Ниже приведены рекомендации по использованию этих параметров
    • Задайте максимальный возраст параметра GetGeopositionAsync , чтобы указать, сколько времени назад может быть полезно для вашего приложения. Если ваше приложение может использовать позицию, которая составляет несколько секунд или минут, ваше приложение может получить позицию почти сразу и внести вклад в сохранение питания устройства.
    • Задайте параметр времени ожидания GetGeopositionAsync. Это то, как долго приложение может ожидать возврата позиции или ошибки. Вам потребуется выяснить компромиссы между скоростью реагирования на пользователя и точностью, необходимой для вашего приложения.
  • Используйте сеанс непрерывного расположения, если требуются частые обновления позиций. Используйте события positionChanged и statusChanged для обнаружения перемещения после определенного порогового значения или для обновлений непрерывного расположения по мере их возникновения.

    При запросе обновлений расположения может потребоваться указать точность, запрошенную приложением, задав DesiredAccuracy или DesiredAccuracyInMeters. Также следует задать частоту, с которой требуются обновления расположения, с помощью функции MovementThreshold или ReportInterval.

    • Укажите пороговое значение перемещения. Некоторые приложения нуждаются в обновлении расположения только в том случае, если пользователь переместил большое расстояние. Например, приложение, которое предоставляет локальные новости или погодные обновления, может не нуждаться в обновлениях расположения, если расположение пользователя не изменилось в другом городе. В этом случае необходимо настроить минимальное необходимое перемещение для события обновления расположения, задав свойство MovementThreshold . Это влияет на фильтрацию событий PositionChanged . Эти события возникают только в том случае, если изменение позиции превышает пороговое значение перемещения.

    • Используйте reportInterval , который соответствует интерфейсу приложения и минимизирует использование системных ресурсов. Например, для приложения погоды может потребоваться обновление данных только каждые 15 минут. Большинство приложений, отличных от приложений навигации в режиме реального времени, не требуют высокой точности, постоянного потока обновлений расположения. Если вашему приложению не требуется наиболее точный поток данных или требуются обновления редко, задайте свойство ReportInterval , чтобы указать минимальную частоту обновлений расположения, необходимых вашему приложению. Затем источник расположения может сохранять мощность, вычисляя расположение только при необходимости.

      Приложения, требующие данных в режиме реального времени, должны задать ReportInterval значение 0, чтобы указать, что минимальный интервал не указан. Интервал отчета по умолчанию составляет 1 секунду или чаще, чем оборудование может поддерживаться, в зависимости от того, что меньше.

      Устройства, предоставляющие данные о расположении, могут отслеживать интервал отчета, запрашиваемый различными приложениями, и предоставлять отчеты данных с наименьшим запрошенным интервалом. Приложение с наибольшей потребностью в точности таким образом получает необходимые данные. Поэтому возможно, что поставщик расположений будет создавать обновления с более высокой частотой, чем запрошено приложением, если другое приложение запрашивало более частые обновления.

      Обратите внимание , что источник расположения не будет учитывать запрос заданного интервала отчета. Не все устройства поставщика расположений отслеживают интервал отчета, но вы по-прежнему должны предоставить его для тех, кто делает это.

    • Чтобы обеспечить экономию мощности, задайте требуемое свойствоAccuracy , чтобы указать платформу расположения, требуется ли приложению высокая точность данных. Если приложения не требуют данных высокой точности, система может сохранить мощность, не включив поставщиков GPS.

      • Задайте значение desiredAccuracy на HIGH, чтобы включить GPS для получения данных.
      • Задайте для параметра DesiredAccuracy значение Default и используйте только шаблон одноразового вызова, чтобы свести к минимуму потребление энергии, если приложение использует сведения о расположении исключительно для назначения рекламы.

      Если ваше приложение имеет определенные потребности в точности, может потребоваться использовать свойство DesiredAccuracyInMeters вместо использования DesiredAccuracy. Это особенно полезно в Windows Телефон, где положение обычно можно получить на основе сотовых маяков, маяков Wi-Fi и спутников. Выбор более конкретного значения точности поможет системе определить правильные технологии для использования с наименьшими затратами на питание при предоставлении позиции.

      Например:

      • Если ваше приложение получает расположение для настройки рекламы, погоды, новостей и т. д., достаточно точности 5000 метров.
      • Если ваше приложение отображает близлежащие сделки в районе, точность 300 метров, как правило, хороша для предоставления результатов.
      • Если пользователь ищет рекомендации по близлежащим ресторанам, мы, вероятно, хотим получить позицию в блоке, поэтому точность в 100 метров достаточно.
      • Если пользователь пытается поделиться своей позицией, приложение должно запросить точность около 10 метров.
    • Используйте свойство Geocoordinate.accuracy, если приложение имеет определенные требования к точности. Например, приложения навигации должны использовать свойство Geocoordinate.accuracy , чтобы определить, соответствуют ли доступные данные расположения требованиям приложения.

  • Рассмотрим задержку запуска. При первом запросе данных о расположении приложения может возникнуть небольшая задержка (1–2 секунды), когда поставщик расположений запускается. Рассмотрим это в проектировании пользовательского интерфейса приложения. Например, можно избежать блокировки других задач, ожидающих завершения вызова GetGeopositionAsync.

  • Рассмотрим фоновое поведение. Если приложение не имеет фокуса, оно не получит события обновления расположения во время приостановки в фоновом режиме. Если приложение отслеживает обновления расположения, регистрируйте их, имейте в виду это. Когда приложение восстанавливает фокус, оно получает только новые события. Он не получает никаких обновлений, которые произошли при неактивном состоянии.

  • Эффективно используйте необработанные датчики и датчики слияния. Существует два типа датчиков: необработанные и fusion.

    • Необработанные датчики включают акселерометр, гирометр и магнитометр.
    • Датчики Fusion включают ориентацию, инклинометр и компас. Датчики Fusion получают данные из сочетаний необработанных датчиков.

    API-интерфейсы среда выполнения Windows могут получить доступ ко всем этим датчикам, кроме магнитометра. Датчики Fusion являются более точными и стабильными, чем необработанные датчики, но они используют больше энергии. Для правильной цели следует использовать правильные датчики. Дополнительные сведения см. в разделе "Датчики".

резервная Подключение

Дополнительные рекомендации по использованию

Обнаружение изменений в параметрах расположения

Пользователь может отключить функции расположения с помощью параметров конфиденциальности расположения в приложении Параметры.

  • Чтобы определить, когда пользователь отключает или повторно отключает службы расположения:
    • Обработка события StatusChanged. Свойство Status аргумента для события StatusChanged имеет значение Disabled, если пользователь отключает службы расположения.
    • Проверьте коды ошибок, возвращаемые из GetGeopositionAsync. Если пользователь отключил службы расположения, вызовы GetGeopositionAsync завершаются ошибкой ACCESS_DENIED, а свойство LocationStatus имеет значение "Отключено".
  • Если у вас есть приложение, для которого важны данные о расположении ( например, приложение сопоставления), обязательно выполните следующие действия:
    • Обработайте событие PositionChanged , чтобы получить обновления, если расположение пользователя изменится.
    • Обработайте событие StatusChanged , как описано ранее, для обнаружения изменений в параметрах расположения.

Обратите внимание, что служба расположения вернет данные по мере его доступности. Сначала он может вернуть расположение с большим радиусом ошибки, а затем обновить расположение с более точной информацией по мере его доступности. Приложения, отображающие расположение пользователя, обычно хотят обновить расположение, так как более точные сведения становятся доступными.

Графические представления расположения

Если приложение использует Geocoordinate.accuracy, чтобы четко указать текущее расположение пользователя на карте. Существует три основных диапазона для точности — радиус ошибки примерно в 10 метров, радиус ошибки примерно в 100 метров и радиус ошибки больше 1 километра. Используя сведения о точности, вы можете убедиться, что ваше приложение точно отображает расположение в контексте доступных данных. Общие сведения об использовании элемента управления картой см. в разделе "Отображение карт" с представлениями 2D, 3D и Streetside.

  • Для точности примерно равно 10 метров (разрешение GPS), расположение может быть обозначено точкой или закреплением на карте. С этой точностью можно также показать координаты широты и долготы и адрес улицы.

    Пример карты, отображаемой при точности gps примерно в 10 метров.

  • Для точности от 10 до 500 метров (примерно 100 метров), расположение обычно получается через разрешение Wi-Fi. Расположение, полученное от сотовой связи, имеет точность около 300 метров. В таком случае рекомендуется, чтобы приложение отображалось радиусом ошибки. Для приложений, показывающих направления, в которых требуется центрирование, такая точка может отображаться с радиусом ошибки вокруг него.

    Пример карты, отображаемой при точности wi-fi примерно в 100 метров.

  • Если точность, возвращаемая, превышает 1 км, вы, вероятно, получаете сведения о расположении на уровне IP-адресов. Этот уровень точности часто слишком низкий, чтобы определить определенное место на карте. Приложение должно увеличить масштаб до уровня города на карте или в соответствующую область на основе радиуса ошибки (например, уровня региона).

    пример карты, отображаемой при точности wi-fi примерно в 1 км.

Если точность расположения переключается с одной полосы точности на другую, предоставьте точный переход между различными графическими представлениями. Для этого нужно:

  • Сделать анимацию перехода гладкой и сохраняя переход быстро и гибко.
  • Дождитесь нескольких последовательных отчетов, чтобы подтвердить изменение точности, чтобы предотвратить нежелательные и слишком частые увеличения.

Текстовые представления расположения

Некоторые типы приложений , например, погодное приложение или локальное информационное приложение, должны представлять расположение текстовым образом в разных диапазонах точности. Не забудьте четко отобразить расположение и только до уровня точности, предоставленной в данных.

  • Для точности приблизительно равно 10 метров (разрешение GPS), полученные данные о расположении довольно точны и поэтому можно передавать на уровень имени района. Также можно использовать имя города, название штата или провинции, а также имя страны или региона.
  • Для точности приблизительно равно 100 метров (разрешение Wi-Fi), полученные данные расположения умеренно точны, поэтому рекомендуется отображать информацию вниз по названию города. Избегайте использования имени района.
  • Для точности больше 1 километра (разрешение IP-адресов) отображается только имя штата или провинции или страны или региона.

Рекомендации по конфиденциальности

Географическое расположение пользователя — это личная информация (PII). На следующем веб-сайте приведены рекомендации по защите конфиденциальности пользователей.