0Pricing
Swift Academy · Lección

Solicitar autorización de ubicación

Gestione correctamente los permisos y la privacidad.

Solicitar autorización de ubicación es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

Por qué la ubicación requiere autorización

En las plataformas de Apple, acceder a la ubicación del usuario es una operación sensible para la privacidad. Su app debe solicitar explícitamente la autorización antes de que Core Location proporcione coordenadas. El sistema muestra un cuadro de diálogo de autorización la primera vez que la solicita.

  • El usuario concede la autorización por aplicación.
  • No puede omitirla mediante programación.
import CoreLocation

let manager = CLLocationManager()

Claves de descripción de uso de Info.plist

Antes de solicitar la autorización, debe añadir una cadena de descripción de uso a Info.plist. Estas cadenas se muestran al usuario en el cuadro de diálogo de autorización. Las dos claves principales son:

  • NSLocationWhenInUseUsageDescription — para acceder únicamente en primer plano.
  • NSLocationAlwaysAndWhenInUseUsageDescription — también para acceder en segundo plano.

Omitir la clave pertinente hace que la solicitud falle silenciosamente o provoque que la app se bloquee.

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

Creación de CLLocationManager

CLLocationManager es el objeto central que coordina los servicios de ubicación. Cree una instancia, mantenga una referencia fuerte y asígnele un delegado para recibir callbacks.

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

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

Solicitar autorización mientras se usa la app

Llame a requestWhenInUseAuthorization() para solicitar acceso en primer plano. El sistema muestra el diálogo una sola vez; después, recuerda la elección. Si el estado ya se ha determinado, la llamada no hace nada.

func requestPermission() {
    manager.requestWhenInUseAuthorization()
}

Solicitar autorización para usar siempre la ubicación

Para recibir actualizaciones en segundo plano (geovallas, seguimiento continuo), llame a requestAlwaysAuthorization(). Apple exige obtener primero la autorización mientras se usa la app y después elevarla a Siempre. Use esta opción con moderación y justifíquela en la descripción de uso.

func requestAlways() {
    manager.requestAlwaysAuthorization()
}

Lectura del estado de autorización

El estado actual de la autorización se encuentra en manager.authorizationStatus (una propiedad de instancia en iOS 14 y versiones posteriores). Entre sus posibles valores están .notDetermined, .denied, .restricted, .authorizedWhenInUse y .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
}

El delegado CLLocationManagerDelegate

Los cambios de autorización se entregan de forma asíncrona mediante el delegado. Implemente locationManagerDidChangeAuthorization(_:) para reaccionar cuando el usuario tome una decisión. Nunca dé por hecho que la autorización se ha concedido inmediatamente después de llamar a la solicitud.

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

Gestión de los estados denegado o restringido

Si el usuario deniega el acceso, no puede volver a solicitarlo. En su lugar, detecte .denied y guíelo hasta Ajustes. .restricted significa que el acceso está bloqueado por controles parentales o por un perfil de MDM, y tampoco puede recuperarse desde la app.

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

Autorización de precisión (precisa frente a reducida)

Desde iOS 14, los usuarios pueden conceder únicamente una precisión reducida (aproximada). Compruebe manager.accuracyAuthorization. Si realmente necesita datos precisos (por ejemplo, para la navegación giro a giro), llame a requestTemporaryFullAccuracyAuthorization(withPurposeKey:) con una clave definida en Info.plist.

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

Comprobar si los servicios de ubicación están activados

Además de la autorización por aplicación, el interruptor de los servicios de ubicación del dispositivo puede estar desactivado. Compruebe CLLocationManager.locationServicesEnabled() en una cola en segundo plano (llamarlo en el hilo principal puede bloquearlo). Si están desactivados, ninguna app recibe la ubicación.

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

Un flujo completo de autorización

En conjunto: cree el administrador, establezca el delegado, solicite la autorización mientras se usa la app y, después, inicie las actualizaciones dentro del callback de autorización. Este es el patrón canónico para cualquier función que use la ubicación.

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

Comprobación rápida: autorización

Compruebe su comprensión del flujo de autorización.

Resumen: solicitar autorización

Ha aprendido a solicitar de forma segura la autorización para usar la ubicación:

  • Añada NSLocationWhenInUseUsageDescription (y la variante Always si es necesario) a Info.plist.
  • Cree un CLLocationManager, mantenga una referencia fuerte y establezca su delegado.
  • Llame a requestWhenInUseAuthorization() y eleve la autorización a Always únicamente si es necesario.
  • Reaccione en locationManagerDidChangeAuthorization(_:) y gestione los casos denegado, restringido y de precisión reducida.

Preguntas frecuentes

¿La lección «Solicitar autorización de ubicación» es gratis?

Sí — el texto completo de «Solicitar autorización de ubicación» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Solicitar autorización de ubicación»?

Gestione correctamente los permisos y la privacidad. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Solicitar autorización de ubicación»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Solicitar autorización de ubicación
  2. Obtener la ubicación del usuario
  3. Mostrar mapas en SwiftUI
  4. Geocodificación y regiones
← Volver a Swift Academy