0Pricing
Swift Academy · Lektion

Standortberechtigung anfordern

Behandeln Sie Berechtigungen und Datenschutz korrekt.

Standortberechtigung anfordern ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum der Standort eine Berechtigung benötigt

Auf Apple-Plattformen ist der Zugriff auf den Standort des Benutzers ein datenschutzsensibler Vorgang. Ihre App muss ausdrücklich eine Autorisierung anfordern, bevor Core Location Koordinaten liefert. Das System zeigt beim ersten Anfordern einen Berechtigungsdialog an.

  • Die Autorisierung wird vom Benutzer pro App erteilt.
  • Sie können sie nicht programmgesteuert umgehen.
import CoreLocation

let manager = CLLocationManager()

Nutzungshinweisschlüssel in Info.plist

Bevor Sie eine Autorisierung anfordern, müssen Sie in Info.plist eine Zeichenfolge mit einer Beschreibung der Nutzung hinzufügen. Diese Zeichenfolgen werden dem Benutzer im Berechtigungsdialog angezeigt. Die beiden wichtigsten sind:

  • NSLocationWhenInUseUsageDescription — nur für den Zugriff im Vordergrund.
  • NSLocationAlwaysAndWhenInUseUsageDescription — auch für den Zugriff im Hintergrund.

Wenn der relevante Schlüssel fehlt, schlägt die Anfrage stillschweigend fehl oder die App stürzt ab.

<!-- Info.plist -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>We use your location to show nearby places.</string>

CLLocationManager erstellen

CLLocationManager ist das zentrale Objekt, das die Ortungsdienste koordiniert. Sie erstellen eine Instanz, behalten eine starke Referenz darauf und weisen ihr einen Delegate zu, um Rückrufe zu empfangen.

final class LocationService: NSObject {
    let manager = CLLocationManager()

    override init() {
        super.init()
        manager.delegate = self
    }
}

Autorisierung bei Verwendung anfordern

Rufen Sie requestWhenInUseAuthorization() auf, um Zugriff im Vordergrund anzufordern. Das System zeigt den Dialog nur einmal an; danach wird die Auswahl gespeichert. Wenn die Entscheidung bereits getroffen wurde, hat der Aufruf keine Wirkung.

func requestPermission() {
    manager.requestWhenInUseAuthorization()
}

Always-Autorisierung anfordern

Für Aktualisierungen im Hintergrund, etwa Geofencing oder kontinuierliches Tracking, rufen Sie requestAlwaysAuthorization() auf. Apple verlangt, dass Sie zunächst die Autorisierung bei Verwendung erhalten und anschließend auf Always erweitern. Verwenden Sie diese Möglichkeit sparsam und begründen Sie sie in Ihrem Nutzungshinweis.

func requestAlways() {
    manager.requestAlwaysAuthorization()
}

Autorisierungsstatus lesen

Der aktuelle Berechtigungsstatus befindet sich in manager.authorizationStatus (einer Instanzeigenschaft ab iOS 14). Mögliche Werte sind unter anderem .notDetermined, .denied, .restricted, .authorizedWhenInUse und .authorizedAlways.

let status = manager.authorizationStatus
switch status {
case .notDetermined: print("Ask the user")
case .denied, .restricted: print("No access")
case .authorizedWhenInUse, .authorizedAlways: print("Good to go")
@unknown default: break
}

Der CLLocationManagerDelegate

Änderungen der Autorisierung werden asynchron über den Delegate übermittelt. Implementieren Sie locationManagerDidChangeAuthorization(_:), um zu reagieren, wenn der Benutzer eine Auswahl trifft. Gehen Sie niemals davon aus, dass die Berechtigung unmittelbar nach dem Anfordern erteilt wurde.

extension LocationService: CLLocationManagerDelegate {
    func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
        switch manager.authorizationStatus {
        case .authorizedWhenInUse, .authorizedAlways:
            manager.startUpdatingLocation()
        default:
            print("Not authorized")
        }
    }
}

Verweigerte oder eingeschränkte Zugriffe behandeln

Wenn der Benutzer den Zugriff verweigert, können Sie ihn nicht erneut anfordern. Erkennen Sie stattdessen .denied und führen Sie den Benutzer zu den Einstellungen. .restricted bedeutet, dass der Zugriff durch die Kindersicherung oder ein MDM-Profil blockiert ist und auch innerhalb der App nicht wiederhergestellt werden kann.

func handle(_ status: CLAuthorizationStatus) {
    if status == .denied {
        // Deep-link the user to Settings > Privacy > Location
        print("Open Settings to enable location")
    }
}

Genauigkeitsautorisierung (präzise oder reduziert)

Seit iOS 14 können Benutzer auch nur eine reduzierte (ungefähre) Genauigkeit gewähren. Prüfen Sie manager.accuracyAuthorization. Wenn Sie tatsächlich präzise Daten benötigen, etwa für eine Turn-by-Turn-Navigation, rufen Sie requestTemporaryFullAccuracyAuthorization(withPurposeKey:) mit einem in Info.plist definierten Schlüssel auf.

if manager.accuracyAuthorization == .reducedAccuracy {
    manager.requestTemporaryFullAccuracyAuthorization(
        withPurposeKey: "PreciseForNavigation"
    )
}

Prüfen, ob die Ortungsdienste aktiviert sind

Zusätzlich zur appbezogenen Berechtigung kann die geräteweite Einstellung für die Ortungsdienste deaktiviert sein. Prüfen Sie CLLocationManager.locationServicesEnabled() in einer Hintergrundwarteschlange, da der Aufruf im Hauptthread blockieren kann. Wenn die Ortungsdienste deaktiviert sind, erhält keine App Standortdaten.

DispatchQueue.global().async {
    if CLLocationManager.locationServicesEnabled() {
        print("System location is on")
    } else {
        print("System location is off")
    }
}

Ein vollständiger Autorisierungsablauf

Zusammengefasst: Erstellen Sie den Manager, legen Sie den Delegate fest, fordern Sie die Autorisierung bei Verwendung an und starten Sie anschließend die Aktualisierungen im Autorisierungsrückruf. Dies ist das übliche Muster für jede standortbezogene Funktion.

final class LocationService: NSObject, CLLocationManagerDelegate {
    let manager = CLLocationManager()
    override init() {
        super.init()
        manager.delegate = self
        manager.requestWhenInUseAuthorization()
    }
    func locationManagerDidChangeAuthorization(_ m: CLLocationManager) {
        if m.authorizationStatus == .authorizedWhenInUse {
            m.startUpdatingLocation()
        }
    }
}

Kurztest: Autorisierung

Testen Sie Ihr Verständnis des Autorisierungsablaufs.

Zusammenfassung: Autorisierung anfordern

Sie haben gelernt, wie Sie die Standortberechtigung sicher anfordern:

  • Fügen Sie NSLocationWhenInUseUsageDescription und bei Bedarf die Always-Variante zu Info.plist hinzu.
  • Erstellen Sie einen CLLocationManager, behalten Sie eine starke Referenz darauf und legen Sie seinen Delegate fest.
  • Rufen Sie requestWhenInUseAuthorization() auf und erweitern Sie die Autorisierung nur bei Bedarf auf Always.
  • Reagieren Sie in locationManagerDidChangeAuthorization(_:) und behandeln Sie Fälle mit verweigerter, eingeschränkter oder reduzierter Genauigkeit.

Häufig gestellte Fragen

Ist die Lektion „Standortberechtigung anfordern“ kostenlos?

Ja — der vollständige Text von „Standortberechtigung anfordern“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Standortberechtigung anfordern“?

Behandeln Sie Berechtigungen und Datenschutz korrekt. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Standortberechtigung anfordern“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Standortberechtigung anfordern
  2. Standort des Benutzers abrufen
  3. Karten in SwiftUI anzeigen
  4. Geocoding und Regionen
← Zurück zu Swift Academy