Demander l’autorisation de localisation
Gérez correctement les autorisations et la confidentialité.
Demander l’autorisation de localisation est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.
Pourquoi la localisation nécessite une autorisation
Sur les plateformes Apple, l’accès à la localisation de l’utilisateur est une opération sensible du point de vue de la confidentialité. Votre application doit demander explicitement une autorisation avant que Core Location ne fournisse des coordonnées. Le système affiche une boîte de dialogue d’autorisation la première fois que vous effectuez cette demande.
- L’autorisation est accordée par l’utilisateur pour chaque application.
- Vous ne pouvez pas la contourner par programmation.
import CoreLocation
let manager = CLLocationManager()Clés de description de l’utilisation dans Info.plist
Avant de demander une autorisation, vous devez ajouter une chaîne décrivant l’utilisation à Info.plist. Ces chaînes sont affichées à l’utilisateur dans la boîte de dialogue d’autorisation. Les deux principales sont :
NSLocationWhenInUseUsageDescription— pour un accès uniquement au premier plan.NSLocationAlwaysAndWhenInUseUsageDescription— également pour un accès en arrière-plan.
L’omission de la clé pertinente fait échouer silencieusement la demande ou provoque un plantage.
<!-- Info.plist -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>We use your location to show nearby places.</string>Création de CLLocationManager
CLLocationManager est l’objet central qui orchestre les services de localisation. Créez-en une instance, conservez une référence forte vers celle-ci et affectez-lui un délégué pour recevoir les notifications.
final class LocationService: NSObject {
let manager = CLLocationManager()
override init() {
super.init()
manager.delegate = self
}
}Demander l’autorisation lorsque l’application est utilisée
Appelez requestWhenInUseAuthorization() pour demander un accès au premier plan. Le système affiche la boîte de dialogue une seule fois ; le choix est ensuite mémorisé. Si la décision a déjà été prise, l’appel ne fait rien.
func requestPermission() {
manager.requestWhenInUseAuthorization()
}Demander l’autorisation « toujours »
Pour les mises à jour en arrière-plan (géorepérage, suivi continu), appelez requestAlwaysAuthorization(). Apple exige que vous obteniez d’abord l’autorisation lorsque l’application est utilisée, puis que vous passiez à l’autorisation « toujours ». Utilisez cette autorisation avec parcimonie et justifiez-la dans votre description de l’utilisation.
func requestAlways() {
manager.requestAlwaysAuthorization()
}Lire l’état de l’autorisation
L’état actuel de l’autorisation se trouve dans manager.authorizationStatus (une propriété d’instance disponible dans iOS 14 et les versions ultérieures). Les valeurs possibles comprennent .notDetermined, .denied, .restricted, .authorizedWhenInUse et .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
}Le délégué de CLLocationManager
Les changements d’autorisation sont transmis de manière asynchrone par l’intermédiaire du délégué. Implémentez locationManagerDidChangeAuthorization(_:) pour réagir lorsque l’utilisateur fait un choix. Ne supposez jamais que l’autorisation est accordée immédiatement après l’appel de la demande.
extension LocationService: CLLocationManagerDelegate {
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
switch manager.authorizationStatus {
case .authorizedWhenInUse, .authorizedAlways:
manager.startUpdatingLocation()
default:
print("Not authorized")
}
}
}Gérer les accès refusés ou restreints
Si l’utilisateur refuse l’accès, vous ne pouvez pas lui présenter à nouveau la demande. Détectez plutôt .denied et guidez-le vers les Réglages. .restricted signifie que l’accès est bloqué par des contrôles parentaux ou un profil MDM ; cette situation ne peut pas non plus être corrigée depuis l’application.
func handle(_ status: CLAuthorizationStatus) {
if status == .denied {
// Deep-link the user to Settings > Privacy > Location
print("Open Settings to enable location")
}
}Autorisation de la précision (précise ou réduite)
Depuis iOS 14, les utilisateurs peuvent n’accorder qu’une précision réduite (approximative). Vérifiez manager.accuracyAuthorization. Si vous avez réellement besoin de données précises (par exemple pour une navigation virage par virage), appelez requestTemporaryFullAccuracyAuthorization(withPurposeKey:) avec une clé définie dans Info.plist.
if manager.accuracyAuthorization == .reducedAccuracy {
manager.requestTemporaryFullAccuracyAuthorization(
withPurposeKey: "PreciseForNavigation"
)
}Vérifier que les services de localisation sont activés
En plus de l’autorisation propre à chaque application, l’interrupteur des services de localisation à l’échelle de l’appareil peut être désactivé. Vérifiez CLLocationManager.locationServicesEnabled() dans une file d’attente d’arrière-plan (son appel sur le fil d’exécution principal peut bloquer). S’ils sont désactivés, aucune application ne reçoit de données de localisation.
DispatchQueue.global().async {
if CLLocationManager.locationServicesEnabled() {
print("System location is on")
} else {
print("System location is off")
}
}Un flux d’autorisation complet
En résumé : créez le gestionnaire, définissez son délégué, demandez l’autorisation lorsque l’application est utilisée, puis démarrez les mises à jour dans le rappel d’autorisation. Il s’agit du schéma de référence pour toute fonctionnalité utilisant la localisation.
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()
}
}
}Vérification rapide : autorisation
Vérifiez votre compréhension du flux d’autorisation.
Récapitulatif : demander une autorisation
Vous avez appris à demander en toute sécurité l’autorisation d’accéder à la localisation :
- Ajoutez
NSLocationWhenInUseUsageDescription(ainsi que la variante « toujours » si nécessaire) à Info.plist. - Créez un
CLLocationManager, conservez une référence forte et définissez son délégué. - Appelez
requestWhenInUseAuthorization(), puis passez à l’autorisation « toujours » uniquement si nécessaire. - Réagissez dans
locationManagerDidChangeAuthorization(_:)et gérez les cas de refus, de restriction et de précision réduite.
Questions Fréquemment Posées
La leçon « Demander l’autorisation de localisation » est-elle gratuite ?
Oui — le texte complet de « Demander l’autorisation de localisation » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Demander l’autorisation de localisation » ?
Gérez correctement les autorisations et la confidentialité. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Swift Academy ?
Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Demander l’autorisation de localisation » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?
Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Demander l’autorisation de localisation
- Obtenir la position de l’utilisateur
- Afficher des cartes dans SwiftUI
- Géocodage et régions