Рекомендации по геозонии приложений
Следуйте этим рекомендациям по геозонам в приложении.
Важные API
Рекомендации
Если приложению потребуется доступ к Интернету при возникновении события Геозонии , перед созданием геозоны проверьте доступ к Интернету.
- Если в настоящее время приложение не имеет доступа к Интернету, вы можете предложить пользователю подключиться к Интернету, прежде чем настроить геозону.
- Если доступ к Интернету невозможен, избегайте использования энергии, необходимой для проверок расположения геозон.
Убедитесь, что релевантность уведомлений геофенсов выполняется путем проверки метки времени и текущего расположения, когда событие геозоны указывает на изменение введенного или выходного состояния. Дополнительные сведения см. в разделе проверки метки времени и текущего расположения ниже.
Создайте исключения для управления случаями, когда устройство не может получить доступ к сведениям о расположении и уведомить пользователя при необходимости. Сведения о расположении могут быть недоступны, так как разрешения отключены, устройство не содержит GPS-радио, сигнал GPS заблокирован, или сигнал Wi-Fi недостаточно сильный.
Как правило, не требуется прослушивать события геозон в переднем плане и фоновом режиме одновременно. Однако если приложению нужно прослушивать события геозон в переднем плане и фоновом режиме:
- Вызовите метод ReadReports, чтобы узнать, произошло ли событие.
- Отмените регистрацию прослушивателя событий переднего плана, когда приложение не отображается пользователю и повторно зарегистрируйтесь, когда оно снова становится видимым.
Дополнительные сведения см . в примерах кода и прослушивателях переднего плана.
Не используйте более 1000 геозон для каждого приложения. Система на самом деле поддерживает тысячи геозон на каждое приложение, вы можете поддерживать хорошую производительность приложения, чтобы снизить использование памяти приложения с помощью не более 1000.
Не создавайте геозону с радиусом меньше 50 метров. Если ваше приложение должно использовать геозону с небольшим радиусом, советуйте пользователям использовать приложение на устройстве с GPS-радио, чтобы обеспечить оптимальную производительность.
Дополнительные рекомендации по использованию
Проверка метки времени и текущего расположения
Если событие указывает на изменение введенного или выходного состояния, проверьте метку времени события и текущего расположения. Различные факторы, такие как система, не имеющие достаточных ресурсов для запуска фоновой задачи, пользователь не замечает уведомление или устройство находится в режиме ожидания, может повлиять на то, когда событие фактически обрабатывается пользователем. Например, может произойти следующая последовательность:
- Приложение создает геозону и отслеживает геозону для событий ввода и выхода.
- Пользователь перемещает устройство внутри геозоны, что приводит к активации события ввода.
- Приложение отправляет пользователю уведомление о том, что они находятся в геозоне.
- Пользователь был занят и не замечает уведомление до 10 минут спустя.
- В течение этой 10-минутной задержки пользователь вернулся за пределы геозоны.
С метки времени можно сказать, что действие произошло в прошлом. В текущем расположении можно увидеть, что пользователь теперь вернулся за пределы геозоны. В зависимости от функциональности приложения может потребоваться отфильтровать это событие.
Прослушиватели фона и переднего плана
Как правило, приложению не нужно прослушивать события геозон как на переднем плане, так и в фоновой задаче одновременно. Самый чистый метод обработки случая, когда может потребоваться оба, заключается в том, чтобы фоновая задача обрабатывала уведомления. Если вы настраиваете прослушиватели геозон переднего плана и фона, то нет никаких гарантий, которые будут активированы в первую очередь и поэтому необходимо всегда вызывать метод ReadReports , чтобы узнать, произошло ли событие.
Если вы настроили прослушиватели геозон переднего плана и фона, отмените регистрацию прослушивателя событий переднего плана всякий раз, когда приложение не отображается пользователю и повторно зарегистрируйте приложение, когда оно становится видимым снова. Ниже приведен пример кода, регистрирующего событие видимости.
Windows.UI.Core.CoreWindow coreWindow;
// This needs to be set before InitializeComponent sets up event registration for app visibility
coreWindow = CoreWindow.GetForCurrentThread();
coreWindow.VisibilityChanged += OnVisibilityChanged;
При изменении видимости можно включить или отключить обработчики событий переднего плана, как показано здесь.
private void OnVisibilityChanged(CoreWindow sender, VisibilityChangedEventArgs args)
{
// NOTE: After the app is no longer visible on the screen and before the app is suspended
// you might want your app to use toast notification for any geofence activity.
// By registering for VisibiltyChanged the app is notified when the app is no longer visible in the foreground.
if (args.Visible)
{
// register for foreground events
GeofenceMonitor.Current.GeofenceStateChanged += OnGeofenceStateChanged;
GeofenceMonitor.Current.StatusChanged += OnGeofenceStatusChanged;
}
else
{
// unregister foreground events (let background capture events)
GeofenceMonitor.Current.GeofenceStateChanged -= OnGeofenceStateChanged;
GeofenceMonitor.Current.StatusChanged -= OnGeofenceStatusChanged;
}
}
Изменение размера геозон
Хотя GPS может предоставить наиболее точные сведения о расположении, геофенсинг также может использовать Wi-Fi или другие датчики расположения для определения текущей позиции пользователя. Но использование этих других методов может повлиять на размер геозон, которые можно создать. Если уровень точности низкий, создание небольших геозон не будет полезным. Как правило, рекомендуется не создавать геозону с радиусом меньше 50 метров. Кроме того, фоновые задачи геозоны выполняются периодически в Windows; Если вы используете небольшую геозону, возможно, вы можете полностью пропустить событие ВВОД или выход.
Если ваше приложение должно использовать геозону с небольшим радиусом, советуйте пользователям использовать приложение на устройстве с GPS-радио, чтобы обеспечить оптимальную производительность.