Modifiche al comportamento dell'API per l'accesso e la posizione Wi-Fi

Riepilogo delle modifiche

Per gestire meglio le app che hanno accesso alla posizione, Windows prevede di aggiungere nuovi controlli sulla privacy.

Attualmente, un'app può visualizzare le reti Wi-Fi disponibili nelle vicinanze del dispositivo che esegue l'app e usare tali reti per determinare la posizione precisa del dispositivo. Tuttavia, in futuro, l'accesso alle API che forniscono gli identificatori BSSID (Basic Service Set Identifier) necessari verrà limitato solo alle app configurate dall'utente come autorizzate ad accedere alla posizione precisa dell'utente. Il consenso all'uso del servizio location è configurato in Impostazioni di>Windows Privacy e posizione di sicurezza.> Può essere impostato a livello di dispositivo, a livello di utente o a livello di singola app. Dopo l'implementazione di questa modifica, se l'utente non ha dato il consenso richiesto, il sistema attiverà una richiesta una tantum la prima volta che un'app viene bloccata.

Ecco un esempio del prompt di sistema:

Esempio del prompt di sistema

Se hai un'app che chiama le API Wi-Fi in wlanapi.h o nello spazio dei nomi Windows.Devices.WiFi o NetworkInformation o Geolocator, questo argomento è adatto a te. Descrive in dettaglio come ottimizzare il comportamento dell'app per migliorare l'esperienza utente.

Quando verranno apportate le modifiche?

Le modifiche verranno apportate inizialmente in una versione di Windows Insider Preview e successivamente in una versione di funzionalità di Windows (una versione commerciale).

  • In una versione di Windows Insider Preview, le modifiche saranno applicate per la prima volta a ottobre 2023.
  • Si avrà quindi fino alla versione di funzionalità di Windows seguente nell'autunno 2024 per testare gli scenari dell'app e per apportare eventuali modifiche necessarie. Dopo tale data, i dispositivi Windows inizieranno a ottenere l'aggiornamento che contiene la modifica del comportamento descritta in precedenza.

Come accennato, anche i dettagli in questo documento potrebbero cambiare prima che la funzionalità venga rilasciata commercialmente.

Come è possibile prepararsi per le modifiche?

Questa modifica influisce su diverse superfici API. Inoltre, come descritto in un momento, alcune API inizieranno a restituire codici "accesso negato" in determinate condizioni. È quindi consigliabile testare l'app per assicurarsi che tutto funzioni come previsto quando l'app inizia a ricevere i valori restituiti "accesso negato" nei computer degli utenti.

In breve, ti invitiamo come sviluppatore di app a apportare le modifiche seguenti al codice dell'app. Queste modifiche consentiranno agli utenti (quando necessario) di concedere all'app l'accesso alla posizione precisa dell'utente; e per migliorare l'esperienza utente:

  1. Non effettuare una chiamata di scansione Wi-Fi all'interno della tua app, a meno che non sia strettamente necessario.
  2. Se usi un'analisi Wi-Fi per scopi di posizione, sostituisci l'analisi con una chiamata API Location.
  3. Controllare quando viene visualizzata la richiesta di sistema in modo che venga visualizzata la richiesta insieme agli scenari in-app.
  4. Compila nella tua app richieste che informano l'utente che devono modificare le impostazioni di Windows per concedere l'accesso.

Quali API saranno interessate?

L'app verrà interessata se chiama una di queste API:

LE API Wi-Fi in wlanapi.h di Win32 o in Windows.Devices.WiFi di WinRT

  • Se l'utente non ha dato il consenso dell'app per l'accesso preciso alla posizione, la prima volta che l'app chiama un'API interessata, verrà visualizzata una richiesta di sistema una tantum per app se il processo è in esecuzione all'interno del contesto dell'utente e all'esterno della C:\Windows\System32 cartella. A seconda del modo in cui l'app chiama tali API, il prompt potrebbe manifestarsi in modi diversi nell'interfaccia utente dell'app.
  • Se l'utente non ha dato il consenso per l'accesso preciso alla posizione, le API Win32 seguenti nell'intestazione wlanapi.h restituiranno ERROR_ACCESS_DENIED:
  • Se l'utente non ha dato il consenso per l'accesso preciso alla posizione, l'API DeniedBySystem restituirà l'API Windows.Devices.WiFiAdapter.RequestAccessAsync. E altre API nello spazio dei nomi Windows.Devices.WiFi Windows.Devices.WiFi genereranno un'eccezione "Accesso negato".
  • Le chiamate a queste API verranno visualizzate nell'area di notifica in uso e nell'attività recente relativa alla posizione.

WlanRegisterNotification è interessato anche, a seconda degli argomenti passati. Se il flag WLAN_NOTIFICATION_SOURCE_MSM è impostato in dwNotifSource, è necessaria la funzionalità del dispositivo wiFiControl (vedere Dichiarazioni di funzionalità dell'app). Se tale funzionalità non viene concessa, la funzione restituisce ERROR_ACCESS_DENIED. La richiesta della funzionalità del dispositivo wiFiControl richiederà il consenso dell'utente per quanto riguarda l'accesso alla posizione.

Azione necessaria per le API Wi-Fi

Per creare un'esperienza migliore per gli utenti dell'app e garantire un corretto funzionamento, devi apportare le modifiche seguenti al comportamento dell'app per controllare quando vengono visualizzate le richieste di sistema:

  • Se l'app deve conoscere la posizione del dispositivo host, deve chiamare le API di georilevazione, anziché usare un'analisi Wi-Fi.
  • Per fare in modo che la richiesta di sistema monouso per app venga visualizzata in un punto appropriato nell'esperienza utente, l'app deve chiamare WiFiAdapter.RequestAccessAsync. Il processo deve essere in esecuzione all'interno del contesto dell'utente e all'esterno della C:\Windows\System32 cartella. La chiamata deve essere allineata a un'azione dell'utente che richiede la connessione Wi-Fi o la posizione (con conseguente maggiore frequenza di consenso rispetto alla richiesta dell'utente immediatamente dopo l'installazione).
  • L'app può eseguire una query sullo stato di accesso alla posizione usando l'API AppCapability.CheckAccess con la funzionalità del dispositivo wiFiControl . Se l'accesso seguente attiverà una finestra di dialogo, l'API restituirà AppCapabilityAccessStatus.UserPromptRequired.
  • Per ricevere una notifica e rispondere di conseguenza ogni volta che l'utente modifica il consenso alla posizione, l'app deve sottoscrivere l'evento AppCapability.AccessChanged .
  • È consigliabile aggiungere un'esperienza app in-app per lo scenario di accesso negato. In questo scenario, l'app deve reindirizzare gli utenti alle impostazioni di Windows in modo che l'utente possa consentire all'app di accedere alla posizione precisa. A tale scopo, passare la stringa "ms-settings:privacy-location" al metodo Launcher.LaunchUriAsync .
  • L'app deve limitare le richieste a livelli ragionevoli, in modo che l'icona dell'uso non venga visualizzata di frequente nell'area di notifica.

Metodo WinRT NetworkInformation.GetLanIdentifiers

Azione necessaria per NetworkInformation

Allo stesso modo descritto in precedenza per le API Wi-Fi, l'app deve richiedere/eseguire query di accesso, monitorare le modifiche e indirizzare gli utenti a Impostazioni.

Metodo WinRT Geolocator.RequestAccessAsync

Azione necessaria per la georilevazione

Per creare un'esperienza migliore per gli utenti dell'app e garantire un corretto funzionamento, devi apportare le modifiche seguenti al comportamento dell'app per controllare quando vengono visualizzate le richieste di sistema:

  • Per fare in modo che la richiesta di sistema monouso per app venga visualizzata in un punto appropriato nell'esperienza utente, l'app deve chiamare Geolocator.RequestAccessAsync. Il processo deve essere in esecuzione all'interno del contesto dell'utente e all'esterno della C:\Windows\System32 cartella. La chiamata deve in genere essere allineata a un'azione dell'utente che richiede una posizione precisa (con conseguente maggiore frequenza di consenso rispetto alla richiesta dell'utente immediatamente dopo l'installazione).
  • Per ricevere una notifica e rispondere di conseguenza ogni volta che l'utente modifica il consenso della posizione, l'app deve sottoscrivere l'evento Geolocator.StatusChangedevent e recuperare lo stato dell'autorizzazione della posizione dalla proprietà StatusChangedEventArgs.Status .
  • È consigliabile aggiungere un'esperienza app in-app per lo scenario di accesso negato. In questo scenario, l'app deve reindirizzare gli utenti alle impostazioni di Windows in modo che l'utente possa consentire all'app di accedere alla posizione precisa. A tale scopo, passare la stringa "ms-settings:privacy-location" al metodo Launcher.LaunchUriAsync .

Come testare l'app

  1. Usa un PC Windows registrato nel Programma Windows Insider. Deve trovarsi nel canale Canary, build 25976 o versione successiva.
  2. Disattivare Servizi di posizione in Impostazioni>di Windows Privacy e posizione di sicurezza.>
  3. Eseguire l'app che usa informazioni sulla posizione o wi-fi.
  4. Il risultato previsto è che viene visualizzato un prompt del sistema che richiede il consenso per la posizione.

Come inviare commenti e suggerimenti

Apprezziamo il supporto e il feedback continui. Inviare eventuali segnalazioni di bug tramite l'app Hub di Feedback e indicare l'app o altri dettagli nella descrizione. La categoria è Dispositivi e Driver>Location Services.

Categoria dell'hub di feedback