Изменения в поведении API для доступа к Wi-Fi и расположения
Сводка изменений
Чтобы лучше управлять доступом приложений к расположению, Windows планирует добавить новые элементы управления конфиденциальностью.
В настоящее время приложение может просматривать сети Wi-Fi, которые можно найти в непосредственной близости от устройства, на котором запущено приложение, и использовать эти сети для определения точного расположения устройства. Но в будущем доступ к API, предоставляющим необходимые идентификаторы набора служб (BSSID), будет ограничен только теми приложениями, которые пользователь настроил как разрешенные для доступа к точному расположению пользователя. Это согласие на использование службы "Расположение" настроено в разделе "Параметры>Windows" и "Расположение безопасности".> Его можно задать на уровне устройства, уровне пользователя или отдельном уровне приложения. После реализации этого изменения, если пользователь не дал требуемого согласия, система запустит одноразовый запрос при первом блокировке приложения.
Ниже приведен пример системного запроса:
Если у вас есть приложение, которое вызывает API Wi-Fi в wlanapi.h или в пространстве имен Windows.Devices.WiFi, или NetworkInformation или Geolocator, то этот раздел предназначен для вас. В нем подробно описано, как оптимизировать поведение приложения для улучшения взаимодействия с пользователем.
Когда будут происходить изменения?
Изменения будут происходить изначально в выпуске предварительной версии программы предварительной оценки Windows, а затем в выпуске компонентов Windows (коммерческий выпуск).
- В выпуске предварительной оценки Windows изменения впервые вступают в силу в октябре 2023 года.
- Затем вы будете иметь следующий выпуск функции Windows осенью 2024 года, чтобы протестировать сценарии вашего приложения и внести все необходимые изменения. После этой даты устройства Windows начнут получать обновление, содержащее изменения поведения, описанные выше.
Как уже упоминалось, даже сведения в этом документе могут измениться до коммерческого выпуска функции.
Как подготовиться к изменениям?
Это изменение влияет на несколько поверхностей API. И, как мы описать в данный момент, некоторые API начнут возвращать коды "отказано в доступе" в определенных условиях. Поэтому мы рекомендуем протестировать приложение, чтобы убедиться, что все работает должным образом, как ожидалось, после того, как ваше приложение начнет получать эти "отказано в доступе" возвращаемые значения на компьютерах пользователей.
Короче говоря, мы рекомендуем вам в качестве разработчика приложений внести следующие изменения в код приложения. Эти изменения помогут пользователям (при необходимости) предоставить приложению доступ к точному расположению пользователя; и для улучшения взаимодействия с пользователем:
- Не выполняйте вызов проверки Wi-Fi в приложении, если это не требуется.
- Если вы используете проверку Wi-Fi для целей расположения, замените ее вызовом API расположения.
- Контроль над отображением системного запроса таким образом, чтобы запрос отображался вместе со сценариями в приложении.
- Вставьте в приложение запросы, которые позволяют пользователю знать, что для предоставления доступа необходимо настроить параметры Windows.
Какие API будут затронуты?
Ваше приложение будет затронуто, если он вызывает любой из этих API:
- API Win32 в заголовке wlanapi.h, которые включают BSSID.
- API среда выполнения Windows (WinRT) в Пространство имен Windows.Devices.WiFi.
- Метод WinRT Windows.Networking.Connectivity.NetworkInformation.GetLanIdentifiers.
- Метод WinRT Windows.Devices.Geolocation.Geolocator.RequestAccessAsync.
- Кроме того, запрос возможности устройства wiFiControl потребует согласия от пользователя относительно доступа к расположению. См . объявления возможностей приложения.
API Wi-Fi в wlanapi.h Win32 или в Windows.Devices.WiFi в WinRT
- Если пользователь не дал вашему приложению согласие на точный доступ к расположению, то при первом вызове затронутого API появится одноразовая система приложения, если процесс выполняется в контексте пользователя и за пределами
C:\Windows\System32
папки. В зависимости от того, как приложение вызывает эти API, запрос может проявляться разными способами в пользовательском интерфейсе приложения. - Если пользователь не предоставил согласие на точный доступ к расположению, то следующие API Win32 в заголовке wlanapi.h возвращают ERROR_ACCESS_DENIED:
- WlanGetAvailableNetworkList
- WlanGetNetworkBssList
- WlanQueryInterface (если аргумент OpCode wlan_intf_opcode_current_connection)
- WlanScan
- Если пользователь не предоставил согласие на точный доступ к расположению, API Windows.Devices.WiFi.WiFiAdapter.RequestAccessAsync вернет DeniedBySystem. А другие API в пространстве имен Windows.Devices.WiFi Windows.Devices.WiFi вызовет исключение "Доступ запрещен".
- Вызовы этих API будут отображаться в области системной области и в последнем действии расположения.
WlanRegisterNotification также затрагивается в зависимости от аргументов, которые вы передаете в него. Если флаг WLAN_NOTIFICATION_SOURCE_MSM задан в dwNotifSource, требуется возможность устройства wiFiControl (см. объявления возможностей приложений). Если эта возможность не предоставлена, функция возвращает ERROR_ACCESS_DENIED. Запрос возможности устройства WiFiControl потребует согласия от пользователя относительно доступа к расположению.
Действия, необходимые для API Wi-Fi
Чтобы создать лучший интерфейс для пользователей приложения и обеспечить плавную работу, необходимо внести следующие изменения в поведение приложения, чтобы контролировать, когда отображаются системные запросы:
- Если ваше приложение должно знать расположение устройства узла, он должен вызывать API географического расположения, а не использовать проверку Wi-Fi.
- Чтобы вызвать одноразовую систему для каждого приложения, отображаемую в подходящей точке взаимодействия с пользователем, ваше приложение должно вызвать WiFiAdapter.RequestAccessAsync. Процесс должен выполняться в контексте пользователя и за пределами
C:\Windows\System32
папки. Вызов должен соответствовать действиям пользователя, требующим Wi-Fi или расположения (что приводит к повышению частоты согласия, чем запрос пользователю сразу после установки). - Приложение может запрашивать состояние доступа к расположению с помощью API AppCapability.CheckAccess с возможностью устройства wiFiControl . Если следующий доступ активирует диалоговое окно, API вернет AppCapabilityAccessStatus.UserPromptRequired.
- Чтобы получать уведомления и отвечать соответствующим образом, когда пользователь изменяет согласие на расположение, ваше приложение должно подписаться на событие AppCapability.AccessChanged .
- Вы должны добавить интерфейс приложения в приложении для сценария с запретом доступа. В этом сценарии приложение должно перенаправить пользователей в параметры Windows, чтобы пользователь смог разрешить приложению доступ к точному расположению. Это можно сделать, передав строку ms-settings:privacy-location в метод Launcher.LaunchUriAsync .
- Ваше приложение должно регулировать запросы на разумные уровни, чтобы значок использования расположения не отображал в области системы часто.
Метод WinRT NetworkInformation.GetLanIdentifiers
- Если пользователь не предоставил согласие на точный доступ к расположению, API Windows.Networking.Connectivity.NetworkInformation.GetLanIdentifiers не вернет информацию, связанную с WLAN.
- Вызовы этого API будут отображаться в системной области и в последнем действии расположения.
Действия, необходимые для NetworkInformation
Таким же образом, как описано выше для API Wi-Fi, приложение должно запрашивать или запрашивать доступ, отслеживать изменения и направлять пользователей в параметры.
Метод WinRT Geolocator.RequestAccessAsync
- Если пользователь не предоставил согласие на точный доступ к расположению, отобразится однократная системная строка windows.Devices.Geolocator.RequestAccessAsync .
Действия, необходимые для географического расположения
Чтобы создать лучший интерфейс для пользователей приложения и обеспечить плавную работу, необходимо внести следующие изменения в поведение приложения, чтобы контролировать, когда отображаются системные запросы:
- Чтобы вызвать одноразовую системную строку для каждого приложения, отображаемую в подходящей точке взаимодействия с пользователем, приложение должно вызвать Geolocator.RequestAccessAsync. Процесс должен выполняться в контексте пользователя и за пределами
C:\Windows\System32
папки. Вызов обычно должен выравнивать действие пользователя, требующее точного расположения (что приводит к повышению частоты согласия, чем запрос пользователя сразу после установки). - Чтобы получать уведомления и отвечать соответствующим образом, когда пользователь изменяет согласие на расположение, приложение должно подписаться на событие Geolocator.StatusChangedevent и получить состояние разрешения расположения из свойства StatusChangedEventArgs.Status.
- Вы должны добавить интерфейс приложения в приложении для сценария с запретом доступа. В этом сценарии приложение должно перенаправить пользователей в параметры Windows, чтобы пользователь смог разрешить приложению доступ к точному расположению. Это можно сделать, передав строку ms-settings:privacy-location в метод Launcher.LaunchUriAsync .
Как протестировать приложение
- Используйте компьютер Windows, зарегистрированный в программе предварительной оценки Windows. Он должен находиться на канарском канале, сборке 25976 или более поздней версии.
- Отключите службы расположения в разделе "Параметры>Windows" и "Расположение безопасности".>
- Запустите приложение, использующее сведения о расположении или wi-Fi.
- Ожидаемый результат заключается в том, что системный запрос запрашивает согласие на расположение.
Как дать отзыв
Мы ценим вашу постоянную поддержку и отзывы. Отправьте любые отчеты об ошибках через приложение Центра отзывов и укажите ваше приложение или другие сведения в описании. Категория — "Устройства" и "Службы расположений драйверов>".