Richtlinien für Apps mit Standortbestimmung
In diesem Thema werden Leistungsrichtlinien für Apps beschrieben, die Zugriff auf den Standort eines Benutzers erfordern.
Wichtige APIs
Empfehlungen
Beginnen Sie mit der Verwendung des Standortobjekts erst, wenn die App Standortdaten benötigt.
Rufen Sie RequestAccessAsync auf, bevor Sie auf den Standort des Benutzers zugreifen. Zu diesem Zeitpunkt muss sich Ihre App im Vordergrund befinden, und RequestAccessAsync muss vom UI-Thread aufgerufen werden. Solange der Benutzer Ihrer App keinen Zugriff auf seine Position gewährt hat, kann Ihre App nicht auf Positionsdaten zugreifen.
Wenn der Standort für Ihre App nicht wichtig ist, greifen Sie erst darauf zu, wenn der Benutzer versucht, eine Aufgabe auszuführen, die ihn erfordert. Wenn beispielsweise eine App für soziale Netzwerke über eine Schaltfläche für „Mit meinem Standort einchecken“ verfügt, sollte die App erst dann auf den Standort zugreifen, wenn der Benutzer auf die Schaltfläche klickt. Es ist in Ordnung, sofort auf den Standort zuzugreifen, wenn es für die Standardfunktion Ihrer App erforderlich ist.
Die erste Verwendung des Geolocator-Objekts muss im Standard UI-Thread der Vordergrund-App erfolgen, um die Zustimmungsaufforderung für den Benutzer auszulösen. Die erste Verwendung des Geolocator kann entweder der erste Aufruf von getGeopositionAsync oder die erste Registrierung eines Handlers für das positionChanged-Ereignis sein.
Informieren Sie den Benutzer, wie Standortdaten verwendet werden.
Stellen Sie eine Benutzeroberfläche bereit, damit Benutzer ihren Standort manuell aktualisieren können.
Zeigen Sie einen Fortschrittsbalken oder einen Ring an, während Sie auf den Erhalt von Standortdaten warten.
Zeigen Sie entsprechende Fehlermeldungen oder Dialogfelder an, wenn Standortdienste deaktiviert oder nicht verfügbar sind.
Wenn die Standorteinstellungen Ihrer App den Zugriff auf den Standort des Benutzers nicht gestatten, empfehlen wir, einen praktischen Link zu den Datenschutzeinstellungen des Standorts in der App Einstellungen bereitzustellen. Beispielsweise könnten Sie ein Hyperlink-Steuerelement verwenden oder die LaunchUriAsync-Methode aufrufen, um die App Einstellungen über Code mithilfe des
ms-settings:privacy-location
URI zu starten. Weitere Informationen finden Sie unter Starten der Windows-Einstellungen.Löschen Sie zwischengespeicherte Standortdaten, und geben Sie den Geolocator frei, wenn der Benutzer den Zugriff auf Standortinformationen deaktiviert.
Geben Sie das Geolocator-Objekt frei, wenn der Benutzer den Zugriff auf Standortinformationen über Einstellungen deaktiviert. Die App erhält dann ACCESS_DENIED-Ergebnisse für alle Standort-API-Aufrufe. Wenn Ihre App Standortdaten speichert oder zwischenspeichert, löschen Sie alle zwischengespeicherten Daten, wenn der Benutzer den Zugriff auf Standortinformationen widerruft. Stellen Sie eine alternative Möglichkeit bereit, Standortinformationen manuell einzugeben, wenn Standortdaten nicht über Standortdienste verfügbar sind.
Stellen Sie eine Benutzeroberfläche zum erneuten Aktivieren von Standortdiensten bereit. Stellen Sie beispielsweise eine Aktualisierungsschaltfläche bereit, die das Geolocator-Objekt erneut angibt und versucht, Standortinformationen erneut abzurufen.
Sorgen Sie dafür, dass Ihre App eine Benutzeroberfläche zum erneuten Aktivieren von Standortdiensten bereitstellt.
- Wenn der Benutzer den Standortzugriff nach der Deaktivierung wieder aktiviert, erfolgt keine Benachrichtigung an die App. Die status-Eigenschaft ändert sich nicht, und es gibt kein statusChanged-Ereignis. Ihre App sollte ein neues Geolocator-Objekt erstellen und getGeopositionAsync abrufen, um aktualisierte Standortdaten zu erhalten, oder erneut positionChanged-Ereignisse zu abonnieren. Wenn der Status dann anzeigt, dass der Standort erneut aktiviert wurde, löschen Sie alle Benutzeroberflächen, über die Ihre App den Benutzer zuvor darüber informiert hat, dass Standortdienste deaktiviert wurden, und reagieren Sie entsprechend auf den neuen Status.
- Ihre App sollte außerdem bei der Aktivierung erneut versuchen, Standortdaten abzurufen, oder wenn der Benutzer explizit versucht, Funktionen zu nutzen, die Standortinformationen erfordern, oder zu einem anderen szenariogerechten Zeitpunkt.
Leistung
Verwenden Sie einmalige Standortanforderungen, wenn Ihre App keine Standortupdates empfangen muss. Beispielsweise muss eine App, die einem Foto ein Standort-Tag hinzufügt, keine Standortaktualisierungsereignisse empfangen. Stattdessen sollte der Standort mithilfe von getGeopositionAsync angefordert werden, wie unter Aktuellen Speicherort abrufen beschrieben.
Wenn Sie eine einmalige Standortanforderung erstellen, sollten Sie die folgenden Werte festlegen.
- Geben Sie die von Ihrer App angeforderte Genauigkeit an, indem Sie DesiredAccuracy oder DesiredAccuracyInMeters festlegen. Empfehlungen zur Verwendung dieser Parameter finden Sie unten.
- Legen Sie den Parameter für das maximale Alter von GetGeopositionAsync fest, um anzugeben, wie lange es her sein kann, dass ein Standort ermittelt wurde, um für Ihre App nützlich zu sein. Wenn Ihre App eine Position verwenden kann, die einige Sekunden oder Minuten alt ist, kann Ihre App fast sofort eine Position empfangen und dazu beitragen, Gerätestrom zu sparen.
- Legen Sie den Timeoutparameter von GetGeopositionAsync fest. So lange kann Ihre App auf die Rückgabe einer Position oder eines Fehlers warten. Sie müssen die Kompromisse zwischen reaktionsfähiger Reaktionsfähigkeit für den Benutzer und der Genauigkeit ermitteln, die Ihre App benötigt.
Verwenden Sie eine fortlaufende Standortsitzung, wenn häufige Positionsaktualisierungen erforderlich sind. Verwenden Sie positionChanged- und statusChanged-Ereignisse zum Erkennen von Bewegungen über einen bestimmten Schwellenwert oder für fortlaufende Standortaktualisierungen, sobald diese auftreten.
Beim Anfordern von Standortaktualisierungen können Sie die von Ihrer App angeforderte Genauigkeit angeben, indem Sie DesiredAccuracy oder DesiredAccuracyInMeters festlegen. Sie sollten auch die Häufigkeit festlegen, mit der die Standortaktualisierungen benötigt werden, indem Sie MovementThreshold oder ReportInterval verwenden.
Geben Sie den Bewegungsschwellenwert an. Einige Apps benötigen Standortaktualisierungen nur, wenn der Benutzer eine große Entfernung zurückgelegt hat. Beispielsweise benötigt eine App, die lokale Nachrichten oder Wetteraktualisierungen bereitstellt, möglicherweise keine Standortaktualisierungen, es sei denn, der Standort des Benutzers hat sich in eine andere Stadt geändert. In diesem Fall passen Sie die minimal erforderliche Bewegung für ein Standortaktualisierungsereignis an, indem Sie die MovementThreshold-Eigenschaft festlegen. Dies wirkt sich auf das Filtern von PositionChanged-Ereignissen aus. Diese Ereignisse werden nur ausgelöst, wenn die Änderung der Position den Bewegungsschwellenwert überschreitet.
Verwenden Sie reportInterval, das auf Ihr App-Erlebnis abgestimmt ist und die Nutzung von Systemressourcen minimiert. Beispielsweise erfordert eine Wetter-App möglicherweise nur alle 15 Minuten eine Datenaktualisierung. Die meisten Apps, mit Ausnahme von Echtzeit-Navigations-Apps, erfordern keinen hochpräzisen, konstanten Datenstrom von Standortaktualisierungen. Wenn Ihre App keinen möglichst genauen Datenstrom benötigt oder nur selten Aktualisierungen erfordert, legen Sie die ReportInterval-Eigenschaft fest, um die Mindesthäufigkeit von Standortaktualisierungen anzugeben, die Ihre App benötigt. Die Standortquelle kann dann Energie sparen, indem sie den Standort nur bei Bedarf berechnet.
Für Apps, die Echtzeitdaten erfordern, sollte ReportInterval auf 0 festgelegt werden, um darauf hinzuweisen, dass kein Mindestintervall angegeben ist. Das Standardberichtsintervall beträgt 1 Sekunde oder so häufig, wie es die Hardware unterstützt – je nachdem, welcher Wert kürzer ist.
Geräte, die Standortdaten bereitstellen, können das von verschiedenen Apps angeforderte Berichtsintervall verfolgen und Datenberichte im kleinsten angeforderten Intervall bereitstellen. Die App mit dem höchsten Genauigkeitsbedarf erhält somit die Daten, die sie benötigt. Daher ist es möglich, dass der Standortanbieter Aktualisierungen häufiger generiert als von Ihrer App angefordert, wenn eine andere App häufigere Aktualisierungen angefordert hat.
Hinweis Es kann nicht garantiert werden, dass die Standortquelle der Anforderung für das angegebene Berichtsintervall nachkommt. Nicht alle Geräte von Standortanbietern verfolgen das Berichtsintervall, aber Sie sollten es trotzdem für diejenigen bereitstellen, die dies tun.
Um Energie zu sparen, legen Sie die desiredAccuracy-Eigenschaft fest, um der Standortplattform mitzuteilen, ob Ihre App hochpräzise Daten benötigt. Wenn keine Apps hochpräzise Daten benötigen, kann das System Energie sparen, indem es die GPS-Anbieter nicht einschaltet.
- Legen Sie desiredAccuracy auf HIGH fest, um GPS zum Abrufen von Daten zu aktivieren.
- Legen Sie desiredAccuracy auf Standard fest, und verwenden Sie nur ein einmaliges Aufrufmuster, um den Energieverbrauch zu minimieren, wenn Ihre App Standortinformationen ausschließlich für die Anzeigenausrichtung verwendet.
Wenn Ihre App bestimmte Anforderungen hinsichtlich der Genauigkeit hat, sollten Sie die DesiredAccuracyInMeters-Eigenschaft anstelle von DesiredAccuracy verwenden. Dies ist besonders nützlich auf Windows Phone, wo die Position in der Regel anhand von Mobilfunk-Beacons, WLAN-Beacons und Satelliten ermittelt werden kann. Die Auswahl eines spezifischeren Genauigkeitswerts hilft dem System, die richtigen Technologien zu identifizieren, die bei der Bereitstellung einer Position mit den niedrigsten Energiekosten verwendet werden sollen.
Zum Beispiel:
- Wenn Ihre App den Standort für die Optimierung von Anzeigen, Wetter, Nachrichten usw. erhält, ist im Allgemeinen eine Genauigkeit von 5.000 Metern ausreichend.
- Wenn Ihre App nahegelegene Angebote in der Nachbarschaft anzeigt, reicht im Allgemeinen eine Genauigkeit von 300 Metern aus, um Ergebnisse bereitzustellen.
- Wenn der Benutzer nach Empfehlungen für nahe gelegene Restaurants sucht, möchten wir wahrscheinlich eine Position innerhalb eines Blocks erhalten, sodass eine Genauigkeit von 100 Metern ausreicht.
- Wenn der Benutzer versucht, seine Position freizugeben, sollte die App eine Genauigkeit von etwa 10 Metern anfordern.
Verwenden Sie die Geocoordinate.accuracy-Eigenschaft, wenn Ihre App bestimmte Genauigkeitsanforderungen hat. Navigations-Apps sollten beispielsweise die Geocoordinate.accuracy-Eigenschaft verwenden, um zu bestimmen, ob die verfügbaren Standortdaten den Anforderungen der App entsprechen.
Erwägen Sie die Startverzögerung. Wenn eine App zum ersten Mal Standortdaten anfordert, kann es eine kurze Verzögerung (1–2 Sekunden) geben, während der Standortanbieter gestartet wird. Berücksichtigen Sie dies im Design der Benutzeroberfläche Ihrer App. Beispielsweise möchten Sie möglicherweise vermeiden, andere Aufgaben zu blockieren, bis der Aufruf von GetGeopositionAsync abgeschlossen ist.
Berücksichtigen Sie das Hintergrundverhalten. Wenn Ihre App nicht den Fokus hat, empfängt sie keine Standortaktualisierungsereignisse, während sie im Hintergrund angehalten wird. Wenn Ihre App Standortaktualisierungen nachverfolgt, indem Sie sie protokollieren, beachten Sie dies. Wenn die App den Fokus wiedererlangt, empfängt sie nur noch neue Ereignisse. Sie erhält keine Aktualisierungen, die während der Inaktivität stattgefunden haben.
Verwenden Sie Roh- und Fusionssensoren effizient. Es gibt zwei Arten von Sensoren: Roh und Fusion.
- Rohsensoren umfassen Beschleunigungsmesser, Gyrometer und Magnetometer.
- Fusionssensoren umfassen Ausrichtung, Neigungsmesser und Kompass. Fusionssensoren erhalten ihre Daten aus Kombinationen der Rohsensoren.
Die Windows-Runtime-APIs können mit Ausnahme des Magnetometers auf alle diese Sensoren zugreifen. Fusionssensoren sind genauer und stabiler als Rohsensoren, verbrauchen jedoch mehr Energie. Sie sollten die richtigen Sensoren für den richtigen Zweck verwenden. Weitere Informationen finden Sie unter Sensoren.
Verbundener Standbymodus
- Wenn sich der PC im verbundenen Standbyzustand befindet, können Geolocator-Objekte immer instanziiert werden. Das Geolocator-Objekt findet jedoch keine Sensoren zum Aggregieren und daher laufen Aufrufe von GetGeopositionAsync nach 7 Sekunden ab, PositionChanged-Ereignislistener werden nie aufgerufen und StatusChanged-Ereignislistener werden einmalig mit dem Status NoData aufgerufen.
Weitere Hinweise zur Verwendung
Erkennen von Änderungen an den Standorteinstellungen
Der Benutzer kann die Standortfunktionalität mithilfe der Datenschutzeinstellungen des Standorts in der App Einstellungen verwenden.
- So erkennen Sie, wann der Benutzer Standortdienste deaktiviert oder erneut aktiviert:
- Behandeln Sie das StatusChanged-Ereignis. Die Status-Eigenschaft des Arguments des StatusChanged-Ereignisses hat den Wert Deaktiviert, wenn der Benutzer die Standortdienste deaktiviert.
- Überprüfen Sie die von GetGeopositionAsync zurückgegebenen Fehlercodes. Wenn der Benutzer Standortdienste deaktiviert hat, schlagen Aufrufe von GetGeopositionAsync mit einem ACCESS_DENIED-Fehler fehl, und die LocationStatus-Eigenschaft hat den Wert Deaktiviert.
- Wenn Sie über eine App verfügen, für die Standortdaten wichtig sind , z. B. eine Zuordnungs-App, gehen Sie wie folgt vor:
- Behandeln Sie das PositionChanged-Ereignis, um Aktualisierungen abzurufen, wenn sich der Standort des Benutzers ändert.
- Behandeln Sie das StatusChanged-Ereignis wie zuvor beschrieben, um Änderungen an den Standorteinstellungen zu erkennen.
Beachten Sie, dass der Standortdienst Daten zurückgibt, sobald er verfügbar ist. Er kann zuerst einen Standort mit einem größeren Fehlerradius zurückgeben und dann den Standort mit genaueren Informationen aktualisieren, sobald er verfügbar wird. Apps, die den Standort des Benutzers anzeigen, möchten normalerweise den Standort aktualisieren, da genauere Informationen verfügbar sind.
Grafische Darstellungen der Position
Lassen Sie Ihre App Geocoordinate.accuracy verwenden, um den aktuellen Standort des Benutzers auf der Karte deutlich zu kennzeichnen. Es gibt drei Hauptbereiche für die Genauigkeit: einen Fehlerradius von etwa 10 Metern, einen Fehlerradius von etwa 100 Metern und einen Fehlerradius von mehr als 1 Kilometer. Mithilfe der Genauigkeitsinformationen können Sie sicherstellen, dass Ihre App den Standort im Kontext der verfügbaren Daten genau anzeigt. Allgemeine Informationen zur Verwendung des Kartensteuerelements finden Sie unter Anzeigen von Karten mit 2D-, 3D- und Streetside-Ansichten.
Für eine Genauigkeit von etwa 10 Metern (GPS-Auflösung) kann der Standort durch einen Punkt oder eine Stecknadel auf der Karte gekennzeichnet werden. Mit dieser Genauigkeit können auch Breiten- und Längengradkoordinaten sowie die Straßenadresse angezeigt werden.
Für eine Genauigkeit zwischen 10 und 500 Metern (ca. 100 Meter) wird der Standort im Allgemeinen über eine WLAN-Auflösung empfangen. Der per Mobilfunk ermittelte Standort hat eine Genauigkeit von etwa 300 Metern. In einem solchen Fall wird empfohlen, dass Ihre App einen Fehlerradius anzeigt. Bei Apps, die Richtungen anzeigen, bei denen ein Zentrierpunkt erforderlich ist, kann ein solcher Punkt mit einem ihn umgebenden Fehlerradius angezeigt werden.
Wenn die zurückgegebene Genauigkeit mehr als 1 Kilometer beträgt, erhalten Sie wahrscheinlich Standortinformationen mit einer Auflösung auf IP-Ebene. Diese Genauigkeitsebene ist oft zu gering, um einen bestimmten Punkt auf einer Karte zu lokalisieren. Ihre App sollte auf die Stadtebene auf der Karte oder auf den entsprechenden Bereich basierend auf dem Fehlerradius (z. B. Regionsebene) vergrößern.
Wenn die Standortgenauigkeit von einem Genauigkeitsbereich zum anderen wechselt, sorgen Sie für einen eleganten Übergang zwischen den verschiedenen grafischen Darstellungen. Dies kann durch Folgendes geschehen:
- Sorgen Sie dafür, dass die Übergangsanimation reibungslos verläuft und der Übergang schnell und flüssig bleibt.
- Warten Sie auf einige aufeinanderfolgende Berichte, um die Änderung der Genauigkeit zu bestätigen und so unerwünschte und zu häufige Zooms zu verhindern.
Textdarstellungen des Standorts
Einige Arten von Apps – zum Beispiel eine Wetter-App oder eine lokale Informations-App – benötigen Möglichkeiten, den Standort in verschiedenen Genauigkeitsbereichen textlich darzustellen. Achten Sie darauf, dass Sie den Standort deutlich und nur bis zur Genauigkeitsebene anzeigen, die in den Daten angegeben ist.
- Bei einer Genauigkeit von ungefähr 10 Metern (GPS-Auflösung) sind die empfangenen Standortdaten ziemlich genau und können so an die Ebene des Nachbarschaftsnamens übermittelt werden. Es können auch Städtenamen, Bundesland- oder Kantonsnamen sowie Länder-/Regionsnamen verwendet werden.
- Bei einer Genauigkeit von ungefähr 100 Metern (WLAN-Auflösung) sind die empfangenen Standortdaten moderat genau. Daher empfehlen wir Ihnen, Informationen bis zum Stadtnamen anzuzeigen. Vermeiden Sie die Verwendung des Nachbarschaftsnamens.
- Bei einer Genauigkeit von mehr als 1 Kilometern (IP-Auflösung) wird nur der Name des Bundeslandes oder des Kantons oder des Landes/der Region angezeigt.
Datenschutzaspekte
Der geografische Standort eines Benutzers ist eine persönlich identifizierbare Information (PII). Die folgende Website enthält Anleitungen zum Schutz der Privatsphäre der Benutzer.
Zugehörige Themen
- Einrichten eines Geofence
- Abrufen der aktuellen Position
- Anzeigen von Karten mit 2D-, 3D- und Streetside-Ansichten
- UWP-Standortbeispiel (Geolocation)