0Pricing
Swift Academy · Lezione

Richiesta dell’autorizzazione alla posizione

Gestisci correttamente autorizzazioni e privacy.

Richiesta dell’autorizzazione alla posizione è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.

Perché la posizione richiede un'autorizzazione

Sulle piattaforme Apple, accedere alla posizione dell'utente è un'operazione sensibile per la privacy. La Sua app deve richiedere esplicitamente l'autorizzazione prima che Core Location fornisca le coordinate. Il sistema mostra una finestra di dialogo per l'autorizzazione la prima volta che effettua la richiesta.

  • L'autorizzazione viene concessa dall'utente per ogni singola app.
  • Non può aggirarla programmaticamente.
import CoreLocation

let manager = CLLocationManager()

Chiavi delle descrizioni d'uso di Info.plist

Prima di richiedere l'autorizzazione, deve aggiungere una stringa di descrizione d'uso a Info.plist. Queste stringhe vengono mostrate all'utente nella finestra di dialogo per l'autorizzazione. Le due chiavi principali sono:

  • NSLocationWhenInUseUsageDescription — per l'accesso solo in primo piano.
  • NSLocationAlwaysAndWhenInUseUsageDescription — anche per l'accesso in background.

L'omissione della chiave pertinente fa fallire la richiesta senza messaggi oppure provoca un arresto anomalo.

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

Creazione di CLLocationManager

CLLocationManager è l'oggetto centrale che coordina i servizi di localizzazione. Ne crei un'istanza, mantenga un riferimento forte e assegni un delegate per ricevere i callback.

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

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

Richiesta dell'autorizzazione Quando in uso

Chiami requestWhenInUseAuthorization() per richiedere l'accesso in primo piano. Il sistema presenta la finestra di dialogo una sola volta; in seguito la scelta viene ricordata. Se è già stata determinata, la chiamata non produce alcun effetto.

func requestPermission() {
    manager.requestWhenInUseAuthorization()
}

Richiesta dell'autorizzazione Sempre

Per gli aggiornamenti in background (geofencing, tracciamento continuo), chiami requestAlwaysAuthorization(). Apple richiede di ottenere prima l'autorizzazione Quando in uso e di passare poi a Sempre. La usi con moderazione e la motivi nella descrizione d'uso.

func requestAlways() {
    manager.requestAlwaysAuthorization()
}

Lettura dello stato dell'autorizzazione

Lo stato attuale dell'autorizzazione si trova in manager.authorizationStatus (una proprietà di istanza su iOS 14 e versioni successive). I valori possibili includono .notDetermined, .denied, .restricted, .authorizedWhenInUse e .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
}

Il CLLocationManagerDelegate

Le modifiche all'autorizzazione vengono comunicate in modo asincrono tramite il delegate. Implementi locationManagerDidChangeAuthorization(_:) per reagire alla scelta dell'utente. Non dia mai per scontato che l'autorizzazione sia stata concessa subito dopo aver chiamato la richiesta.

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

Gestione dell'accesso negato o limitato

Se l'utente nega l'accesso, non può visualizzare di nuovo la richiesta. Rilevi invece .denied e lo indirizzi a Impostazioni. .restricted indica che l'accesso è bloccato dai controlli parentali o da un profilo MDM e non può essere ripristinato dall'app.

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

Precisione dell'autorizzazione (precisa o ridotta)

A partire da iOS 14, gli utenti possono concedere solo una precisione ridotta (approssimativa). Verifichi manager.accuracyAuthorization. Se ha realmente bisogno di dati precisi (ad esempio per la navigazione turn-by-turn), chiami requestTemporaryFullAccuracyAuthorization(withPurposeKey:) con una chiave definita in Info.plist.

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

Verifica dell'attivazione dei servizi di localizzazione

Oltre all'autorizzazione per la singola app, l'interruttore dei servizi di localizzazione del dispositivo può essere disattivato. Verifichi CLLocationManager.locationServicesEnabled() in una coda in background (chiamarlo nel thread principale può bloccare l'esecuzione). Se è disattivato, nessuna app riceve la posizione.

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

Flusso completo di autorizzazione

In sintesi: crei il manager, imposti il delegate, richieda l'autorizzazione Quando in uso e avvii gli aggiornamenti all'interno del callback di autorizzazione. Questo è il modello standard per qualsiasi funzionalità che utilizzi la posizione.

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()
        }
    }
}

Verifica rapida: autorizzazione

Verifichi di aver compreso il flusso di autorizzazione.

Riepilogo: richiesta dell'autorizzazione

Ha imparato a richiedere in sicurezza l'autorizzazione alla posizione:

  • Aggiunga NSLocationWhenInUseUsageDescription (e la variante Always, se necessaria) a Info.plist.
  • Crei un CLLocationManager, ne mantenga un riferimento forte e ne imposti il delegate.
  • Chiami requestWhenInUseAuthorization(), passando a Sempre solo se necessario.
  • Reagisca in locationManagerDidChangeAuthorization(_:) e gestisca i casi di accesso negato, limitato o con precisione ridotta.

Domande Frequenti

La lezione «Richiesta dell’autorizzazione alla posizione» è gratuita?

Sì — il testo completo di «Richiesta dell’autorizzazione alla posizione» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.

Cosa imparerò in «Richiesta dell’autorizzazione alla posizione»?

Gestisci correttamente autorizzazioni e privacy. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Swift Academy?

Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Richiesta dell’autorizzazione alla posizione»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Swift Academy?

Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Richiesta dell’autorizzazione alla posizione
  2. Ottenere la posizione dell’utente
  3. Visualizzazione delle mappe in SwiftUI
  4. Geocoding e regioni
← Torna a Swift Academy