Location Permission est une autorisation qu'une application mobile demande à l'utilisateur pour accéder aux données de sa position géographique. Sans cette autorisation, l'application ne peut pas déterminer les coordonnées de l'appareil et ne peut donc pas fournir de fonctions de géolocalisation. Selon Apple Developer Documentation, 2024, toutes les applications utilisant des services de géolocalisation sont tenues de demander le consentement explicite de l'utilisateur via une boîte de dialogue système.
Points clés
Location Permission est un mécanisme du système d'exploitation qui régule l'accès des applications aux données de localisation géographique de l'appareil. Sans le consentement explicite de l'utilisateur, l'application ne peut pas obtenir les coordonnées GPS, les données des réseaux Wi-Fi ou les informations des antennes relais.
Les plateformes mobiles Android et iOS implémentent leur propre système d'autorisations, mais la logique générale est la même : l'application déclare les autorisations nécessaires dans le manifeste ou le fichier de configuration, puis les demande à l'exécution. Selon Android Developers, 2024, à partir d'Android 10, toutes les autorisations de géolocalisation appartiennent à la catégorie dangereuse et nécessitent une demande à l'exécution.
La raison de cette approche est la protection de la vie privée des utilisateurs. Les données de localisation permettent de construire des itinéraires de déplacement, de déterminer les lieux de travail et de loisirs, ainsi que d'identifier la personne. Par conséquent, les deux plateformes exigent une explication transparente dans la boîte de dialogue de demande : l'application doit indiquer la raison pour laquelle elle a besoin d'accéder à la géolocalisation.
L'autorisation de géolocalisation est nécessaire pour toute application dont la fonctionnalité dépend de la connaissance de la position physique de l'utilisateur. Cartes et navigation, applications de livraison, services météorologiques, réseaux sociaux avec géolocalisation — toutes ces catégories de logiciels nécessitent Location Permission.
Sans cette autorisation, l'application ne peut déterminer les coordonnées de l'appareil par aucune des méthodes disponibles : ni via le module GPS, ni via le scan Wi-Fi, ni via le positionnement par antennes relais. L'utilisateur peut révoquer l'autorisation à tout moment dans les paramètres système, après quoi l'application doit gérer correctement le refus.
Selon une étude du Pew Research Center (2024), environ 45 % des utilisateurs révoquent l'accès à la géolocalisation dans les applications qui ne l'utilisent pas pour leur fonctionnalité principale. Cela signifie que le développeur doit justifier clairement la demande et proposer des mécanismes alternatifs pour ceux qui ont refusé Location Permission.
Le RGPD en Europe et la loi fédérale 152-FZ en Russie exigent l'obtention d'un consentement éclairé pour le traitement des données de localisation. L'application doit non seulement demander l'autorisation via la boîte de dialogue système, mais aussi fournir un avis séparé sur les finalités de la collecte des données. La violation de ces exigences entraîne des amendes allant jusqu'à 20 millions d'euros ou 4 % du chiffre d'affaires annuel de l'entreprise.
Si l'application ne demande pas Location Permission ou si l'utilisateur refuse l'accès, le développeur doit prévoir un scénario alternatif. Pour une application de cartographie, il peut s'agir de la saisie manuelle de l'adresse ; pour une application de livraison — la sélection dans une liste d'adresses enregistrées ; pour un service météorologique — la détermination de la ville par adresse IP. Graceful degradation (dégradation progressive) est une pratique standard recommandée par Google et Apple.
Les niveaux d'accès à la géolocalisation diffèrent sur Android et iOS, bien que l'idée générale soit la même : plus l'accès est précis, plus les exigences imposées par la plateforme à l'application sont strictes.
| Niveau d'accès | Android | iOS |
|---|---|---|
| Lors de l'utilisation | Uniquement quand l'application est active | When In Use — seulement dans l'application |
| Arrière-plan | Always — en permanence, même en arrière-plan | Always — nécessite un examen supplémentaire App Store |
| Approximatif | ACCESS_COARSE_LOCATION (précision jusqu'à 500 m) | Avec option Precision = Off (iOS 14+) |
ACCESS_FINE_LOCATION donne accès à des coordonnées GPS précises avec une marge d'erreur de quelques mètres. Pour déclarer cette autorisation dans le manifeste, on utilise la constante android.permission.ACCESS_FINE_LOCATION. ACCESS_COARSE_LOCATION, quant à lui, fournit une localisation approximative avec une précision allant jusqu'à 500 mètres basée sur les données Wi-Fi et les antennes relais.
When In Use permet à l'application de recevoir des coordonnées uniquement lorsqu'elle est ouverte à l'écran. Always donne accès à la géolocalisation même en arrière-plan, mais nécessite un examen obligatoire par l'App Store. À partir d'iOS 14, l'utilisateur peut désactiver séparément le positionnement précis pour chaque application via l'interrupteur Precision.
La demande de Location Permission sur Android se fait en deux étapes : déclaration des autorisations dans le manifeste et demande à l'exécution dans le code. À partir d'Android 6.0 (API 23), toutes les autorisations dangereuses sont demandées pendant l'exécution de l'application, pas lors de l'installation.
La première étape consiste à ajouter les autorisations nécessaires au fichier AndroidManifest.xml. Des constantes différentes sont utilisées pour le positionnement précis et approximatif.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Après la déclaration dans le manifeste, la boîte de dialogue système de demande d'autorisation doit être appelée dans le code de l'application. Regardons un exemple en Kotlin utilisant Activity Result API.
private val locationPermissionRequest =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
when {
permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
// Autorisation accordée
getLocation()
}
permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
// Localisation approximative uniquement
getCoarseLocation()
}
else -> {
// Utilisateur a refusé
showLocationExplanation()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
checkLocationPermission()
}
Si l'utilisateur refuse l'accès, le système Android ne permet pas d'afficher à nouveau la boîte de dialogue automatiquement. Le développeur doit appeler shouldShowRequestPermissionRationale pour afficher une explication préliminaire. En cas de refus répété avec le drapeau Never Ask Again, l'utilisateur doit être redirigé vers les paramètres système.
private fun checkLocationPermission() {
when {
ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED -> {
getLocation()
}
ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_FINE_LOCATION) -> {
showRationaleDialog {
requestLocationPermission()
}
}
else -> {
openAppSettings()
}
}
}
La demande de Location Permission sur iOS nécessite d'ajouter des clés spéciales au fichier Info.plist et d'appeler des méthodes de la classe CLLocationManager. Apple accorde une attention particulière à la confidentialité, donc le texte d'explication dans la boîte de dialogue de demande doit être aussi spécifique que possible.
Pour demander la localisation sur iOS, il faut ajouter une ou les deux clés à Info.plist : NSLocationWhenInUseUsageDescription pour l'accès lors de l'utilisation et NSLocationAlwaysAndWhenInUseUsageDescription pour l'accès en arrière-plan. La valeur de chaque clé est une chaîne qui sera affichée à l'utilisateur dans la boîte de dialogue.
<key>NSLocationWhenInUseUsageDescription</key>
<string>Votre application a besoin de votre position pour afficher les points à proximité sur la carte.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Votre application a besoin d'un accès à la géolocalisation en arrière-plan pour suivre l'itinéraire.</string>
Dans le code Swift, la demande se fait via une instance de CLLocationManager. Selon le niveau d'accès requis, on appelle requestWhenInUseAuthorization ou requestAlwaysAuthorization.
import CoreLocation
class LocationManager: NSObject, CLLocationManagerDelegate {
private let manager = CLLocationManager()
func requestLocationAccess() {
manager.delegate = self
manager.requestWhenInUseAuthorization()
}
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
switch manager.authorizationStatus {
case .authorizedWhenInUse, .authorizedAlways:
startLocationUpdates()
case .denied, .restricted:
showSettingsAlert()
case .notDetermined:
break
}
}
}
Contrairement à Android, iOS ne fournit pas au développeur de méthode pour vérifier shouldShowRequestPermissionRationale. Le système décide lui-même quand afficher l'explication. De plus, sur iOS, l'utilisateur ne peut modifier l'autorisation que via les paramètres système — l'application ne peut pas réafficher la boîte de dialogue système après que l'utilisateur a fait son choix. RequestAlwaysAuthorization demande d'abord When In Use, puis, après avoir obtenu le premier consentement, une boîte de dialogue séparée pour l'accès en arrière-plan.
Les bonnes pratiques avec Location Permission aident à réduire les refus des utilisateurs et à respecter les exigences des magasins d'applications. Google et Apple ont publié des recommandations dont le respect augmente la probabilité d'approbation de l'application.
N'affichez pas la boîte de dialogue de demande de Location Permission immédiatement au lancement de l'application. Un utilisateur qui vient d'ouvrir l'application ne comprend pas encore pourquoi il doit fournir un accès à la géolocalisation. Contextual request signifie que la boîte de dialogue apparaît au moment où l'utilisateur a réellement besoin d'une fonction nécessitant une autorisation. Par exemple, en cliquant sur le bouton « Trouver le magasin le plus proche ».
Avant la boîte de dialogue système, affichez votre propre écran d'explication (pre-permission screen). Expliquez-y pourquoi l'application a besoin de la géolocalisation, quelles données sont collectées et comment elles seront utilisées. Après que l'utilisateur a cliqué sur « Autoriser » sur votre écran, affichez la boîte de dialogue système. Selon Appsflyer (2024), cette approche augmente le taux d'approbation de 25 à 35 %.
L'accès en arrière-plan à la géolocalisation n'est nécessaire que pour les applications qui fonctionnent en arrière-plan : navigateurs, trackers d'activité, applications de livraison. Si votre application n'a besoin de coordonnées que lorsque l'écran est ouvert, demandez When In Use. L'App Store rejettera l'application si Always n'est pas justifié fonctionnellement. Sur Android, l'accès en arrière-plan est en outre réglementé par l'autorisation ACCESS_BACKGROUND_LOCATION.
Foire aux questions
L'application doit gérer correctement le refus et proposer un scénario alternatif. Par exemple, la saisie manuelle de l'adresse ou la détermination de la ville par adresse IP. La boîte de dialogue système ne s'affiche plus — il faut rediriger l'utilisateur vers les paramètres.
Techniquement, oui — la boîte de dialogue système peut être déclenchée sans écran préalable. Cependant, le taux d'approbation sans explication est de 30 à 40 %, alors qu'avec un écran préalable il est de 60 à 75 %. Apple et Google recommandent de toujours expliquer la raison de la demande.
Utilisez ContextCompat.checkSelfPermission avec la constante Manifest.permission.ACCESS_FINE_LOCATION. La méthode retourne PERMISSION_GRANTED ou PERMISSION_DENIED, ce qui permet de déterminer le statut actuel sans appeler la boîte de dialogue système.
ACCESS_FINE_LOCATION donne accès à des coordonnées GPS précises avec une erreur de 3 à 10 mètres. ACCESS_COARSE_LOCATION fournit une localisation approximative avec une précision allant jusqu'à 500 mètres basée sur le Wi-Fi et les antennes relais. Sur Android 12+, le développeur peut demander les deux autorisations simultanément.
Sur Android, le scan des appareils BLE nécessite ACCESS_FINE_LOCATION ou ACCESS_COARSE_LOCATION, car les signaux BLE peuvent être utilisés pour la triangulation de position. Sur iOS, le BLE nécessite seulement l'autorisation Bluetooth — Location Permission n'est pas requis.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi