Veröffentlicht am 24. Januar 2023 von Jan Bunk
Unsere Apps modifizieren die navigator.geolocation
JavaScript API, um dir die meisten Entwicklungsmöglichkeiten und deinen App-Nutzern das optimale Erlebnis zu bieten.
Du kannst die Geolocation-JavaScript-Funktionen wie gewohnt verwenden, solange du die auf dieser Seite genannten Einschränkungen beachtest.
openAppLocationSettings
Diese Funktion öffnet den App-Info-Bildschirm auf Android und die Einstellungsapp auf iOS, wo der Nutzer den Standortzugriff für die App aktivieren kann, auch wenn er die Aufforderung zur Erlaubniserteilung zuvor abgelehnt hat.
Ein Codebeispiel und wann es sinnvoll sein könnte, diese Funktion aufzurufen, findest du im Abschnitt Fehlerbehandlung weiter unten.
Du kannst das appResumed
Event empfangen um zu erkennen, wann der Nutzer von den Einstellungen zurückgekehrt ist.
openDeviceLocationSettings
Diese Funktion öffnet unter Android die Einstellungs-App, in der der Nutzer die Ortungsdienste aktivieren kann. Unter iOS öffnet sie ebenfalls die Einstellungs-App, aber aufgrund technischer Einschränkungen nicht genau die Seite, auf der die Standorteinstellungen verwaltet werden.
Ein Codebeispiel und wann es sinnvoll sein könnte, diese Funktion aufzurufen, findest du im Abschnitt Fehlerbehandlung weiter unten.
Du kannst das appResumed
Event empfangen um zu erkennen, wann der Nutzer von den Einstellungen zurückgekehrt ist.
Beim Abrufen des aktuellen Standorts gibt es eine Reihe von möglichen Fehlerquellen. Wir behalten die Kompatibilität mit der ursprünglichen Geolocation-API bei, liefern aber auch zusätzliche Informationen darüber, was genau schiefgelaufen ist.
function getAppErrorMessage(error) {
if (error.hasOwnProperty("appMessage")) {
return error.appMessage;
}
else {
return null;
}
}
var options = {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
};
navigator.geolocation.getCurrentPosition(function(position) {
// success
console.log("Latitude: " + position.coords.latitude + ", Longitude: " + position.coords.longitude);
}, async function(error) {
// error
switch(error.code) {
case error.PERMISSION_DENIED:
// error.message is always "User denied Geolocation" to be consistent with browser behaviour
console.log("User denied Geolocation");
// Additional information only available for app users:
if (getAppErrorMessage(error) === "Permission denied") {
console.log("User did not grant the app permission to access the location, but we can try again later.");
}
else if (getAppErrorMessage(error) === "Permission denied permanently") {
console.log("User did not grant the app permission to access the location and can only enable the permissions via the app settings.");
// You can open the app settings like this:
await openAppLocationSettings();
}
else if (getAppErrorMessage(error) === "Location service disabled") {
console.log("User did not enable the location service setting in the device settings, even after being prompted to do so by the app.");
// You can open the device's location settings like this:
await openDeviceLocationSettings();
}
break;
case error.POSITION_UNAVAILABLE:
// can occurr in browsers with message "Unknown error acquiring position", but not used by the app at the moment
console.log("Unknown error acquiring position");
break;
case error.TIMEOUT:
// error.message is always "Position acquisition timed out" to be consistent with browser behaviour
console.log("The request to get user location took longer than " + options.timeout + " milliseconds.");
break;
}
}, options);
navigator.geolocation.getCurrentPosition
aufrufst, bekommst du kein GeolocationCoordinates
oder GeolocationPositionError
Objekt zurück, also überprüfe nicht den Objekttyp. Du kannst aber trotzdem auf alle erwarteten Attribute zugreifen.GeolocationCoordinates.altitudeAccuracy
, würde ein Browser normalerweise null zurückgeben, während wir 0 zurückgeben könnten, da dies das ist, was wir vom Gerät erhalten.