Wi-Fi 액세스 및 위치에 대한 API 동작 변경
변경 내용 요약
위치에 액세스할 수 있는 앱을 더 잘 관리하기 위해 Windows는 새로운 개인 정보 보호 컨트롤을 추가할 예정입니다.
현재 앱은 앱을 실행하는 디바이스 근처에서 찾을 수 있는 Wi-Fi 네트워크를 보고, 해당 네트워크를 사용하여 디바이스의 정확한 위치를 확인할 수 있습니다. 그러나 앞으로 필요한 BSSID(기본 서비스 집합 ID)를 제공하는 API에 대한 액세스는 사용자의 정확한 위치에 액세스할 수 있도록 사용자가 구성한 앱으로만 제한됩니다. 위치 서비스 사용에 대한 동의는 Windows 설정>개인 정보 보호 및 보안>위치에 구성됩니다. 디바이스 수준, 사용자 수준 또는 개별 앱 수준에서 설정할 수 있습니다. 이 변경 내용이 구현된 후 사용자가 필요한 동의를 제공하지 않으면 시스템은 앱이 처음 차단될 때 일회성 프롬프트를 트리거합니다.
다음은 시스템 프롬프트의 예입니다.
wlanapi.h 또는 Windows.Devices.WiFi 네임스페이스나 NetworkInformation 또는 Geolocator에서 Wi-Fi API를 호출하는 앱이 있는 경우 이 주제를 참조하세요. 앱의 동작을 최적화하여 사용자 환경을 개선하는 방법을 자세히 설명합니다.
이러한 변경 내용은 언제 적용되나요?
변경 내용은 처음에 Windows Insider Preview 릴리스에서 적용된 다음, 나중에 Windows 기능 릴리스(상용 릴리스)에서 적용됩니다.
- Windows Insider Preview 릴리스에서는 변경 내용이 2023년 10월에 처음 적용됩니다.
- 이후 2024년 가을에 제공되는 다음 Windows 기능 릴리스까지 앱의 시나리오를 테스트하고 필요한 내용을 변경해야 합니다. 해당 날짜 이후 Windows 디바이스는 위에서 설명한 동작 변경 내용이 포함된 업데이트를 받기 시작합니다.
앞서 설명한 대로, 기능이 상용 릴리스에 포함되기 전에는 이 문서의 세부 정보가 변경될 수도 있습니다.
변경 내용에 대해 어떻게 준비할 수 있나요?
이 변경 내용의 영향을 받는 여러 API 측면이 있습니다. 잠시 후에 설명하겠지만, 일부 API는 특정 조건에서 "액세스 거부" 코드를 반환하기 시작합니다. 따라서 앱이 사용자의 컴퓨터에서 "액세스 거부됨" 반환 값을 수신하기 시작하면 모든 요소가 예상대로 작동하는지 확인하기 위해 앱을 테스트하는 것이 좋습니다.
즉, 앱 개발자는 앱 코드를 다음과 같이 변경하는 것이 좋습니다. 이 변경 내용은 필요한 경우 사용자가 사용자의 정확한 위치에 대한 액세스 권한을 앱에 부여하고 사용자 환경을 개선하는 데 도움이 됩니다.
- 반드시 필요한 경우가 아니라면 앱 내에서 Wi-Fi 검색을 호출하지 마세요.
- 위치 목적으로 Wi-Fi 검색을 사용하는 경우 해당 검색을 위치 API 호출로 바꿉니다.
- 앱 내 시나리오와 함께 프롬프트가 표시되도록 시스템 프롬프트가 표시되는 시점을 제어합니다.
- 액세스 권한을 부여하기 위해 Windows 설정을 조정해야 할 수도 있음을 알리는 앱 프롬프트를 빌드합니다.
영향을 받는 API로는 무엇이 있나요?
앱은 다음 API를 호출하는 경우 영향을 받습니다.
- BSSID를 포함하는 wlanapi.h 헤더의 Win32 API.
- Windows.Devices.WiFi 네임스페이스의 Windows 런타임(WinRT) API.
- WinRT 메서드 Windows.Networking.Connectivity.NetworkInformation.GetLanIdentifiers.
- WinRT 메서드 Windows.Devices.Geolocation.Geolocator.RequestAccessAsync.
- 또한 wiFiControl 디바이스 기능을 요청하려면 위치에 대한 액세스와 관련하여 사용자의 동의가 필요합니다. 앱 기능 선언을 참조하세요.
Win32의 wlanapi.h 또는 WinRT의 Windows.Devices.WiFi에 있는 Wi-Fi API
- 사용자가 정확한 위치 액세스에 대한 앱의 요청에 동의하지 않은 경우 앱이 영향을 받는 API를 처음 호출할 때 프로세스가 사용자의 컨텍스트 내에서, 그리고
C:\Windows\System32
폴더 외부에서 실행되는 경우 앱당 일회성 시스템 프롬프트가 표시됩니다. 앱에서 이러한 API를 호출하는 방법에 따라 프롬프트는 앱의 사용자 인터페이스에서 다양한 방식으로 나타날 수 있습니다. - 사용자가 정확한 위치 액세스에 동의하지 않은 경우 wlanapi.h 헤더의 다음 Win32 API는 ERROR_ACCESS_DENIED를 반환합니다.
- WlanGetAvailableNetworkList
- WlanGetNetworkBssList
- WlanQueryInterface(OpCode 인수가 wlan_intf_opcode_current_connection인 경우)
- WlanScan
- 사용자가 정확한 위치 액세스에 동의하지 않은 경우 Windows.Devices.WiFi.WiFiAdapter.RequestAccessAsync API는 DeniedBySystem을 반환합니다. 그리고 Windows.Devices.WiFi 네임스페이스 Windows.Devices.WiFi 네임스페이스의 다른 API에서 "액세스 거부됨" 예외가 발생합니다.
- 이러한 API에 대한 호출은 사용 중인 시스템 트레이 및 위치 최근 활동에 표시됩니다.
WlanRegisterNotification도 전달한 인수에 따라 영향을 받습니다. WLAN_NOTIFICATION_SOURCE_MSM 플래그가 dwNotifSource에 설정된 경우 wiFiControl 디바이스 기능이 필요합니다(앱 기능 선언 참조). 해당 기능에 권한이 부여되지 않은 경우 함수는 ERROR_ACCESS_DENIED를 반환합니다. wiFiControl 디바이스 기능을 요청하려면 위치에 대한 액세스와 관련하여 사용자의 동의가 필요합니다.
Wi-Fi API에 필요한 작업
앱 사용자를 위한 더 나은 환경을 구축하고 원활한 작업을 보장하려면 시스템 프롬프트가 표시되는 시점을 제어하기 위해 앱 동작을 다음과 같이 변경해야 합니다.
- 앱이 호스트 디바이스의 위치를 알아야 하는 경우 Wi-Fi 검색을 사용하는 대신 Geolocation API를 호출해야 합니다.
- 앱당 일회성 시스템 프롬프트가 사용자 환경의 적절한 지점에 표시되도록 하려면 앱에서 WiFiAdapter.RequestAccessAsync를 호출해야 합니다. 프로세스는 사용자의 컨텍스트 내, 그리고
C:\Windows\System32
폴더 외부에서 실행되어야 합니다. 호출은 Wi-Fi 또는 위치가 필요한 사용자 작업에 맞춰야 합니다(설치 직후 사용자에게 메시지를 표시하는 것보다 동의율이 높음). - 앱은 wiFiControl 디바이스 기능과 함께 AppCapability.CheckAccess API를 사용하여 위치 액세스 상태를 쿼리할 수 있습니다. 다음 액세스에서 대화 상자를 트리거하는 경우 API는 AppCapabilityAccessStatus.UserPromptRequired를 반환합니다.
- 사용자가 위치 동의를 변경할 때마다 알림을 받고 그에 따라 응답하려면 앱에서 AppCapability.AccessChanged 이벤트를 구독해야 합니다.
- 액세스 거부 시나리오에 대한 앱 내 환경을 추가해야 합니다. 이 시나리오에서는 사용자의 정확한 위치에 액세스할 수 있게 사용자가 앱을 허용할 수 있도록 사용자를 Windows 설정으로 리디렉션해야 합니다. "ms-settings:privacy-location" 문자열을 Launcher.LaunchUriAsync 메서드에 전달하면 됩니다.
- 위치 사용 중 아이콘이 시스템 트레이이 자주 나타나지 않도록 앱은 요청을 합리적 수준으로 조절해야 합니다.
WinRT NetworkInformation.GetLanIdentifiers 메서드
- 사용자가 정확한 위치 액세스에 동의하지 않은 경우 Windows.Networking.Connectivity.NetworkInformation.GetLanIdentifiers API는 WLAN 관련 정보를 반환하지 않습니다.
- 이 API에 대한 호출은 사용 중인 시스템 트레이 및 위치 최근 활동에 표시됩니다.
NetworkInformation에 필요한 작업
Wi-Fi API에 대해 위에서 설명한 것과 동일한 방식으로 앱은 액세스를 요청/쿼리하고, 변경 내용을 모니터링하며, 사용자에게 설정으로 리디렉션해야 합니다.
WinRT Geolocator.RequestAccessAsync 메서드
- 사용자가 정확한 위치 액세스에 동의하지 않은 경우 Windows.Devices.Geolocation.Geolocator.RequestAccessAsync가 처음 호출될 때 앱당 일회성 시스템 프롬프트가 표시됩니다.
Geolocation에 필요한 작업
앱 사용자를 위한 더 나은 환경을 구축하고 원활한 작업을 보장하려면 시스템 프롬프트가 표시되는 시점을 제어하기 위해 앱 동작을 다음과 같이 변경해야 합니다.
- 앱당 일회성 시스템 프롬프트가 사용자 환경의 적절한 지점에 표시되도록 하려면 앱에서 Geolocator.RequestAccessAsync를 호출해야 합니다. 프로세스는 사용자의 컨텍스트 내, 그리고
C:\Windows\System32
폴더 외부에서 실행되어야 합니다. 호출은 일반적으로 정확한 위치가 필요한 사용자 작업에 맞춰야 합니다(설치 직후 사용자에게 메시지를 표시하는 것보다 동의율이 높음). - 사용자가 위치 동의를 변경할 때마다 알림을 받고 그에 따라 응답하려면 앱에서 Geolocator.StatusChangedevent 이벤트를 구독하고 StatusChangedEventArgs.Status 속성에서 위치 권한 상태를 검색해야 합니다.
- 액세스 거부 시나리오에 대한 앱 내 환경을 추가해야 합니다. 이 시나리오에서는 사용자의 정확한 위치에 액세스할 수 있게 사용자가 앱을 허용할 수 있도록 사용자를 Windows 설정으로 리디렉션해야 합니다. "ms-settings:privacy-location" 문자열을 Launcher.LaunchUriAsync 메서드에 전달하면 됩니다.
앱 테스트 방법
- Windows 참가자 프로그램에 등록된 Windows PC를 사용합니다. 카나리아 채널, 빌드 25976 이상이어야 합니다.
- Windows 설정>개인 정보 보호 및 보안>위치에서 위치 서비스를 끕니다.
- 위치 또는 Wi-Fi 정보를 사용하는 앱을 실행합니다.
- 예상되는 결과로, 위치 동의를 묻는 시스템 프롬프트가 표시됩니다.
피드백을 제공하는 방법
지속적인 지원과 피드백에 감사드립니다. 피드백 허브 앱을 통해 버그 보고서를 제출하고 설명에 앱 또는 기타 세부 정보를 표시하세요. 범주는 디바이스 및 드라이버>위치 서비스입니다.