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
- Solicitar autorización de ubicación
- Obtener la ubicación del usuario
- Mostrar mapas en SwiftUI
- Geocodificación y regiones