Anleitung: Standort des Nutzers ermitteln

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.

Zusätzliche Funktionen

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.

Fehlerbehandlung

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);
    

Einschränkungen

  • Wenn du 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.
  • Wenn einige Attribute vom Gerät nicht unterstützt werden, z. B. 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.