Alterações no comportamento da API para acesso e localização do Wi-Fi
Um resumo das alterações
Para gerenciar melhor quais aplicativos têm acesso à localização, o Windows está planejando adicionar novos controles de privacidade.
Atualmente, um aplicativo pode visualizar as redes Wi-Fi que podem ser encontradas nas proximidades do dispositivo que executa o aplicativo e usar essas redes para determinar a localização precisa do dispositivo. Mas, no futuro, o acesso às APIs que fornecem os identificadores BSSIDs necessários será restrito apenas aos aplicativos que o usuário configurou para ter permissão para acessar a localização precisa do usuário. Esse consentimento para usar o serviço de localização é configurado em Configurações>Privacidade e segurança>Localização. Ele pode ser definido no nível do dispositivo, no nível do usuário ou no nível do aplicativo individual. Depois que essa alteração for implementada, se o usuário não tiver dado o consentimento necessário, o sistema acionará um prompt avulso na primeira vez que um aplicativo for bloqueado.
Veja abaixo um exemplo do prompt do sistema:
Se você tiver um aplicativo que chama APIs Wi-Fi em wlanapi.h, namespace Windows.Devices.WiFi, NetworkInformation ou Geolocator, este tópico é para você. Ele detalha como você pode otimizar o comportamento do seu aplicativo para melhorar a experiência do usuário.
Quando as alterações ocorrerão?
As alterações ocorrerão inicialmente em uma versão do Windows Insider Preview e, posteriormente, em uma versão de recursos do Windows (uma versão comercial).
- Em uma versão do Windows Insider Preview, as alterações entrarão em vigor pela primeira vez em outubro de 2023.
- Você terá até o próximo lançamento de recursos do Windows no outono de 2024 para testar os cenários do seu aplicativo e fazer as alterações necessárias. Após essa data, os dispositivos Windows começarão a receber a atualização que contém a alteração de comportamento descrita acima.
Como mencionado, até mesmo os detalhes neste documento podem ser alterados antes que o recurso seja lançado comercialmente.
Como você pode se preparar para as alterações?
Há várias superfícies de API afetadas por essa alteração. E, como descreveremos daqui a pouco, algumas APIs começarão a retornar códigos de "acesso negado" sob certas condições. Portanto, recomendamos que você teste seu aplicativo para garantir que tudo esteja se comportando conforme o esperado, assim que seu aplicativo começar a receber esses valores de retorno de "acesso negado" nos computadores dos seus usuários.
Em suma, incentivamos você, como desenvolvedor de aplicativos, a fazer as seguintes alterações no código do seu aplicativo. Essas alterações ajudarão seus usuários (quando necessário) a conceder ao seu aplicativo o acesso à localização precisa do usuário, e para melhorar a experiência do usuário:
- Não faça uma chamada de verificação de Wi-Fi no seu aplicativo, a menos que seja estritamente necessário.
- Se você estiver usando uma verificação de Wi-Fi para fins de localização, substitua essa verificação por uma chamada de API de Localização.
- Assuma o controle de quando o prompt do sistema aparecerá para que o prompt seja exibido junto com seus cenários no aplicativo.
- Crie no seu aplicativo prompts que permitem que o usuário saiba que ele precisa ajustar as Configurações do Windows para conceder acesso.
Quais APIs serão afetadas?
Seu aplicativo será afetado se chamar qualquer uma destas APIs:
- APIs Win32 no cabeçalho wlanapi.h que envolvem o BSSID.
- APIs do WinRT (Tempo de Execução do Windows) no namespace Windows.Devices.WiFi.
- O método WinRT Windows.Networking.Connectivity.NetworkInformation.GetLanIdentifiers.
- O método WinRT Windows.Devices.Geolocation.Geolocator.RequestAccessAsync.
- Além disso, solicitar o recurso do dispositivo wiFiControl exigirá o consentimento do usuário em relação ao acesso à localização. Confira Declarações de funcionalidades do aplicativo.
As APIs Wi-Fi no wlanapi.h do Win32 ou no Windows.Devices.WiFi do WinRT
- Se o usuário não tiver dado consentimento ao aplicativo para acesso à localização precisa, na primeira vez que o aplicativo chamar uma API afetada, uma solicitação de sistema único por aplicativo será exibido se o processo estiver sendo executado no contexto do usuário e fora da pasta
C:\Windows\System32
. Dependendo de como seu aplicativo chama essas APIs, o prompt pode se manifestar de maneiras diferentes na interface do usuário do aplicativo. - Se o usuário não tiver dado consentimento para o acesso à localização precisa, as seguintes APIs Win32 no cabeçalho wlanapi.h retornarão ERROR_ACCESS_DENIED:
- WlanGetAvailableNetworkList
- WlanGetNetworkBssList
- WlanQueryInterface (se o argumento de OpCode for wlan_intf_opcode_current_connection)
- WlanScan
- Se o usuário não tiver dado consentimento para o acesso à localização precisa, a API Windows.Devices.WiFi.WiFiAdapter.RequestAccessAsync retornará DeniedBySystem. E outras APIs no namespace Windows.Devices.WiFi gerarão uma exceção de "Acesso negado".
- As chamadas para essas APIs serão exibidas na bandeja do sistema em uso e na atividade recente da localização.
WlanRegisterNotification também é afetado, dependendo dos argumentos que você passa para ele. Se o sinalizador WLAN_NOTIFICATION_SOURCE_MSM for definido em dwNotifSource, a funcionalidade do dispositivo wiFiControl será necessária (confira Declarações de funcionalidade do aplicativo). Se essa funcionalidade não for concedida, a função retornará ERROR_ACCESS_DENIED. Solicitar a funcionalidade do dispositivo wiFiControl exigirá consentimento do usuário em relação ao acesso ao local.
Ação necessária para as APIs Wi-Fi
Para criar uma experiência melhor para os usuários do aplicativo e garantir uma operação tranquila, você deve fazer as seguintes alterações no comportamento do aplicativo para controlar quando os prompts do sistema serão exibidos:
- Se o seu aplicativo precisar saber a localização do dispositivo host, ele deverá chamar as APIs de Geolocalização, em vez de usar uma verificação de Wi-Fi.
- Para fazer com que o prompt avulso do sistema do aplicativo seja exibido em um ponto adequado na experiência do usuário, seu aplicativo deve chamar WiFiAdapter.RequestAccessAsync. O processo deve estar sendo executado dentro do contexto do usuário e fora da
C:\Windows\System32
pasta. A chamada deve ser alinhada a uma ação do usuário que exija Wi-Fi ou localização (resultando em taxas de consentimento mais altas do que avisar o usuário imediatamente após a instalação). - Seu aplicativo pode consultar seu status de acesso à localização usando a API AppCapability.CheckAccess com o recurso de dispositivo wiFiControl. Se o acesso a seguir acionar uma caixa de diálogo, a API retornará AppCapabilityAccessStatus.UserPromptRequired.
- Para ser notificado e responder de acordo sempre que o usuário alterar o consentimento de localização, seu aplicativo deve se inscrever no evento AppCapability.AccessChanged.
- Você deve adicionar uma experiência de aplicativo no aplicativo para o cenário de acesso negado. Nesse cenário, seu aplicativo deve redirecionar os usuários para as Configurações do Windows para que o usuário possa permitir que seu aplicativo acesse sua localização precisa. Você pode fazer isso passando a cadeia de caracteres "ms-settings:privacy-location" para o método Launcher.LaunchUriAsync.
- Seu aplicativo deve limitar as solicitações a níveis aceitáveis, para que o ícone de localização em uso não seja exibido na bandeja do sistema com frequência.
O método WinRT NetworkInformation.GetLanIdentifiers
- Se o usuário não tiver dado consentimento para o acesso à localização precisa, a API Windows.Networking.Connectivity.NetworkInformation.GetLanIdentifiers não retornará as informações relacionadas à WLAN.
- As chamadas para essa API serão exibidas na bandeja do sistema em uso e na atividade recente da localização.
Ações necessárias para NetworkInformation
Confirme descrito acima para as APIs Wi-Fi, seu aplicativo deve solicitar/consultar o acesso, monitorar as alterações e direcionar os usuários para as Configurações.
O método WinRT Geolocator.RequestAccessAsync
- Se o usuário não tiver dado consentimento para o acesso à localização precisa, na primeira vez que Windows.Devices.Geolocation.Geolocator.RequestAccessAsync for chamado, um prompt avulso do sistema do aplicativo será exibido.
Ações necessárias para Geolocalização
Para criar uma experiência melhor para os usuários do aplicativo e garantir uma operação tranquila, você deve fazer as seguintes alterações no comportamento do aplicativo para controlar quando os prompts do sistema serão exibidos:
- Para fazer com que o prompt avulso do sistema do aplicativo seja exibido em um ponto adequado na experiência do usuário, seu aplicativo deve chamar Geolocator.RequestAccessAsync. O processo deve estar sendo executado dentro do contexto do usuário e fora da
C:\Windows\System32
pasta. Normalmente, a chamada deve ser alinhada a uma ação do usuário que exija a localização precisa (resultando em taxas de consentimento mais altas do que avisar o usuário imediatamente após a instalação). - Para ser notificado e responder de acordo sempre que o usuário alterar o consentimento de localização, seu aplicativo deve se inscrever no evento Geolocator.StatusChangedevent e recuperar o status de permissão de localização da propriedade StatusChangedEventArgs.Status.
- Você deve adicionar uma experiência de aplicativo no aplicativo para o cenário de acesso negado. Nesse cenário, seu aplicativo deve redirecionar os usuários para as Configurações do Windows para que o usuário possa permitir que seu aplicativo acesse sua localização precisa. Você pode fazer isso passando a cadeia de caracteres "ms-settings:privacy-location" para o método Launcher.LaunchUriAsync.
Como testar o aplicativo
- Use um computador Windows inscrito no Programa Windows Insider. Deve estar no canal Canary, build 25976 ou superior.
- Desative os serviços de localização em Configurações>Privacidade e segurança>Localização no Windows.
- Execute seu aplicativo que usa as informações de localização ou Wi-Fi.
- O resultado esperado é que você veja um prompt do sistema solicitando o consentimento de localização.
Como fazer comentários
Agradecemos seu apoio e seus comentários contínuos. Envie os relatórios de bugs por meio do aplicativo Hub de Comentários e indique seu aplicativo ou outros detalhes na descrição. A categoria é Dispositivos e Drivers>Serviços de Localização.