Änderungen am API-Verhalten für WLAN-Zugriff und Standort
Eine Zusammenfassung der Änderungen
Um besser zu verwalten, welche Apps Zugriff auf den Standort haben, plant Windows, neue Datenschutzsteuerelemente hinzuzufügen.
Derzeit kann eine App die WLAN-Netzwerke anzeigen, die sich in der Nähe des Geräts befinden, auf dem die App ausgeführt wird, und diese Netzwerke verwenden, um den genauen Standort des Geräts zu ermitteln. Der Zugriff auf APIs, welche die erforderlichen Basic Service Set Identifiers (BSSIDs) bereitstellen, ist jedoch nur auf die Apps beschränkt, die der Benutzer so konfiguriert hat, dass er auf den genauen Standort des Benutzers zugreifen darf. Diese Zustimmung zur Verwendung des Standortdienstes ist unter Windows Einstellungen>Datenschutz und Sicherheit>Standort konfiguriert. Sie kann auf Geräteebene, Benutzerebene oder einzelner App-Ebene festgelegt werden. Nachdem diese Änderung implementiert wurde, löst das System, wenn der Benutzer die erforderliche Zustimmung nicht erteilt hat, eine einmalige Eingabeaufforderung aus, wenn eine App zum ersten Mal blockiert wird.
Hier ist ein Beispiel für die Systemaufforderung:
Wenn Sie über eine App verfügen, die WLAN-APIs entweder in wlanapi.h oder dem Windows.Devices.WiFi-Namespace oder NetworkInformation oder Geolocator aufruft, ist dieses Thema für Sie geeignet. Hier erfahren Sie, wie Sie das Verhalten Ihrer App optimieren können, um die Benutzererfahrung zu verbessern.
Wann werden die Änderungen vorgenommen?
Die Änderungen erfolgen zunächst in einer Windows Insider Preview-Version und später in einer Windows-Featureversion (einer kommerziellen Version).
- In der Windows Insider Preview-Version werden die Änderungen erst im Oktober 2023 wirksam.
- Sie müssen dann bis zur folgenden Windows-Featureversion im Herbst 2024 die Szenarien Ihrer App testen und alle erforderlichen Änderungen vornehmen. Nach diesem Datum beginnen Windows-Geräte mit dem Update, das die oben beschriebene Verhaltensänderung enthält.
Wie bereits erwähnt, können sich auch die Details in diesem Dokument ändern, bevor das Feature kommerziell veröffentlicht wird.
Wie können Sie sich auf die Änderungen vorbereiten?
Es gibt mehrere API-Oberflächen, die von dieser Änderung betroffen sind. Und wie wir gleich beschreiben werden, beginnen einige APIs unter bestimmten Bedingungen mit der Rückgabe von „Zugriffsverweigerungscodes“. Daher wird empfohlen, Ihre App zu testen, um sicherzustellen, dass alles erwartungsgemäß vorkommt, sobald ihre App mit dem Empfang dieser „Zugriff verweigert“-Rückgabewerte auf den Computern Ihrer Benutzer beginnt.
Kurz gesagt, wir empfehlen Ihnen als App-Entwickler, die folgenden Änderungen am Code Ihrer App vorzunehmen. Diese Änderungen helfen Ihren Benutzern (falls erforderlich), Ihrer App Zugriff auf den genauen Standort des Benutzers zu gewähren, und um die Benutzererfahrung zu verbessern:
- Führen Sie keinen WLAN-Scananruf innerhalb Ihrer App durch, es sei denn, es ist unbedingt erforderlich.
- Wenn Sie eine WLAN-Überprüfung für Standortzwecke verwenden, ersetzen Sie diese Überprüfung durch einen Standort-API-Aufruf.
- Übernehmen Sie die Kontrolle darüber, wann die Systemaufforderung angezeigt wird, damit die Eingabeaufforderung zusammen mit Ihren In-App-Szenarien angezeigt wird.
- Bauen Sie in Ihre App Eingabeaufforderungen ein, die dem Benutzer mitteilen, dass er Windows-Einstellungen anpassen muss, um Zugriff zu gewähren.
Welche APIs sind betroffen?
Ihre App wird betroffen sein, wenn sie eine der folgenden APIs aufruft:
- Win32-APIs im wlanapi.h-Header, die BSSID enthalten.
- Windows-Runtime-APIs (WinRT) im Windows.Devices.WiFi-Namespace.
- Die WinRT-Methode Windows.Networking.Connectivity.NetworkInformation.GetLanIdentifiers.
- Die WinRT-Methode Windows.Devices.Geolocation.Geolocator.RequestAccessAsync.
- Außerdem erfordert das Anfordern der wiFiControl-Gerätefunktion die Zustimmung des Benutzers bezüglich des Zugriffs auf den Standort. Siehe Deklarationen von App-Funktionen.
Die WLAN-APIs in Win32's wlanapi.h oder im Windows.Devices.WiFi von WinRT
- Wenn der Benutzer Ihrer App keine Zustimmung für den genauen Standortzugriff erteilt hat, wird beim ersten Aufruf einer betroffenen API der App eine Eingabeaufforderung angezeigt, wenn der Prozess im Kontext des Benutzers und außerhalb des
C:\Windows\System32
Ordners läuft. Je nachdem, wie Ihre App diese APIs aufruft, kann sich die Eingabeaufforderung auf unterschiedliche Weise auf der Benutzeroberfläche Ihrer App manifestieren. - Wenn der Benutzer keine Zustimmung zum präzisem Standortzugriff erteilt hat, geben die folgenden Win32-APIs im wlanapi.h-Header ERROR_ACCESS_DENIED zurück:
- WlanGetAvailableNetworkList
- WlanGetNetworkBssList
- WlanQueryInterface (wenn das Argument von OpCode wlan_intf_opcode_current_connection ist)
- WlanScan
- Wenn der Benutzer keine Zustimmung zu präzisem Standortzugriff erteilt hat, gibt die Windows.Devices.WiFi.WiFiAdapter.RequestAccessAsync-API deniedBySystem zurück. Und andere APIs im Windows.Devices.WiFi-Namespace Windows.Devices.WiFi lösen eine Ausnahme „Zugriff verweigert“ aus.
- Aufrufe dieser APIs werden in der nicht verwendeten Taskleiste und der aktuellen Standortaktivität angezeigt.
WlanRegisterNotification ist auch abhängig von den Argumenten, die Sie an sie übergeben, betroffen. Wenn das WLAN_NOTIFICATION_SOURCE_MSM-Flag in dwNotifSource festgelegt ist, ist die wiFiControl-Gerätefunktion erforderlich (siehe App-Funktionsdeklarationen). Wenn diese Funktion nicht gewährt wird, gibt die Funktion ERROR_ACCESS_DENIED zurück. Das Anfordern der wiFiControl-Gerätefunktion erfordert die Zustimmung des Benutzers bezüglich des Zugriffs auf den Standort.
Aktion erforderlich für die WLAN-APIs
Um eine bessere Benutzererfahrung für die Benutzer Ihrer App zu erzielen und einen reibungslosen Betrieb sicherzustellen, sollten Sie die folgenden Änderungen am Verhalten Ihrer App vornehmen, um zu steuern, wann Systemaufforderungen angezeigt werden:
- Wenn Ihre App den Standort des Hostgeräts kennen muss, sollte sie die Geolocation-APIs aufrufen, anstatt einen WLAN-Scan zu verwenden.
- Damit die einmalige Systemaufforderung pro App an einem geeigneten Punkt der Benutzeroberfläche angezeigt wird, sollte Ihre App WiFiAdapter.RequestAccessAsync aufrufen. Der Prozess muss innerhalb des Kontexts des Benutzers und außerhalb des
C:\Windows\System32
Ordners ausgeführt werden. Der Aufruf sollte an einer Benutzeraktion ausgerichtet werden, die WLAN oder Standort erfordert (was zu höheren Zustimmungsraten führt als die Aufforderung des Benutzers unmittelbar nach der Installation). - Ihre App kann ihren Standortzugriffsstatus mithilfe der AppCapability.CheckAccess-API mit der wiFiControl-Gerätefunktion abfragen. Wenn der folgende Zugriff ein Dialogfeld auslöst, gibt die API AppCapabilityAccessStatus.UserPromptRequired zurück.
- Um benachrichtigt zu werden und entsprechend zu reagieren, wenn der Benutzer die Standortzustimmung ändert, sollte Ihre App das AppCapability.AccessChanged-Ereignis abonnieren.
- Sie sollten eine In-App-App-Umgebung für das Szenario „Zugriff verweigert“ hinzufügen. In diesem Szenario sollte Ihre App Benutzer zu den Windows-Einstellungen umleiten, damit der Benutzer Ihrer App den Zugriff auf ihren genauen Standort ermöglichen kann. Dazu übergeben Sie die Zeichenfolge „ms-settings:privacy-location“ an die Launcher.LaunchUriAsync-Methode.
- Ihre App sollte Anfragen auf ein angemessenes Level drosseln, sodass das Symbol für die Verwendung nicht häufig in der Taskleiste angezeigt wird.
Die WinRT NetworkInformation.GetLanIdentifiers-Methode
- Wenn der Benutzer nicht dem präzisen Standortzugriff zugestimmt hat, gibt die Windows.Networking.Connectivity.NetworkInformation.GetLanIdentifiers-API keine WLAN-bezogenen Informationen zurück.
- Aufrufe dieser API werden in der verwendeten Taskleiste und der zuletzt verwendeten Standortaktivität angezeigt.
Aktion erforderlich für NetworkInformation
Auf die gleiche Weise wie oben für die WLAN-APIs beschrieben, sollte Ihre App Zugriff anfordern, Änderungen überwachen und Benutzer an die Einstellungen weiterleiten.
Die WinRT Geolocator.RequestAccessAsync-Methode
- Wenn der Benutzer dem genauen Standortzugriff nicht zugestimmt hat, wird beim ersten Aufruf von Windows.Devices.Geolocation.Geolocator.RequestAccessAsync eine einmalige Systemaufforderung angezeigt.
Für Geolocation erforderliche Aktion
Um eine bessere Benutzererfahrung für die Benutzer Ihrer App zu erzielen und einen reibungslosen Betrieb sicherzustellen, sollten Sie die folgenden Änderungen am Verhalten Ihrer App vornehmen, um zu steuern, wann Systemaufforderungen angezeigt werden:
- Damit die einmalige Systemaufforderung pro App an einem geeigneten Punkt in der Benutzeroberfläche angezeigt wird, sollte Ihre App Geolocator.RequestAccessAsync aufrufen. Der Prozess muss innerhalb des Kontexts des Benutzers und außerhalb des
C:\Windows\System32
Ordners ausgeführt werden. Der Aufruf sollte in der Regel an einer Benutzeraktion ausgerichtet werden, die einen genauen Standort erfordert (was zu höheren Zustimmungsraten führt, als den Benutzer unmittelbar nach der Installation aufzufordern). - Um benachrichtigt und entsprechend zu reagieren, wenn der Benutzer die Standortzustimmung ändert, sollte Ihre App das Geolocator.StatusChangedevent-Ereignis abonnieren und den Status der Standortberechtigung aus der StatusChangedEventArgs.Status-Eigenschaft abrufen.
- Sie sollten eine In-App-App-Umgebung für das Szenario „Zugriff verweigert“ hinzufügen. In diesem Szenario sollte Ihre App Benutzer zu den Windows-Einstellungen umleiten, damit der Benutzer Ihrer App den Zugriff auf ihren genauen Standort ermöglichen kann. Dazu übergeben Sie die Zeichenfolge „ms-settings:privacy-location“ an die Launcher.LaunchUriAsync-Methode.
So testen Sie Ihre App
- Verwenden Sie einen Windows-PC, der für das Windows-Insider-Programm registriert ist. Es sollte sich auf dem Canary-Kanal befinden, Build 25976 oder höher.
- Deaktivieren Sie die Standortdienste unter Windows Einstellungen>Datenschutz und Sicherheit>Standort.
- Führen Sie Ihre App, die Standort- oder WLAN-Informationen verwendet, aus.
- Das erwartete Ergebnis ist, dass eine Systemaufforderung angezeigt wird, die Sie zur Zustimmung des Standorts auffordert.
So geben Sie Feedback
Wir freuen uns über Ihre fortlaufende Unterstützung und Ihr Feedback. Übermitteln Sie alle Fehlerberichte über die Feedback-Hub-App und geben Sie Ihre App oder andere Details in der Beschreibung an. Die Kategorie ist Geräte und Treiber>Standortdienste.