Location Permission è un'autorizzazione che un'applicazione mobile richiede all'utente per accedere ai dati sulla sua posizione geografica. Senza questa autorizzazione, l'applicazione non può determinare le coordinate del dispositivo e quindi non può fornire funzionalità di geolocalizzazione. Secondo Apple Developer Documentation, 2024, tutte le applicazioni che utilizzano servizi di geolocalizzazione sono obbligate a richiedere il consenso esplicito dell'utente tramite un dialogo di sistema.
Punti chiave
Location Permission è un meccanismo del sistema operativo che regola l'accesso delle applicazioni ai dati sulla posizione geografica del dispositivo. Senza il consenso esplicito dell'utente, l'applicazione non può ottenere coordinate GPS, dati di reti Wi-Fi o informazioni sulle torri cellulari.
Le piattaforme mobili Android e iOS implementano il proprio sistema di autorizzazioni, ma la logica generale è la stessa: l'applicazione dichiara le autorizzazioni necessarie nel manifest o file di configurazione, poi le richiede a runtime. Secondo Android Developers, 2024, a partire da Android 10, tutte le autorizzazioni di geolocalizzazione appartengono alla categoria pericolose e richiedono una richiesta a runtime.
La ragione di questo approccio è la protezione della privacy degli utenti. I dati di localizzazione possono essere utilizzati per costruire percorsi di viaggio, determinare luoghi di lavoro e svago, nonché identificare la persona. Pertanto, entrambe le piattaforme richiedono una spiegazione trasparente nel dialogo di richiesta: l'applicazione deve indicare il motivo per cui necessita dell'accesso alla geolocalizzazione.
L'autorizzazione di geolocalizzazione è necessaria per qualsiasi applicazione la cui funzionalità dipenda dalla conoscenza della posizione fisica dell'utente. Mappe e navigazione, app di consegna, servizi meteorologici, social network con geotagging — tutte queste categorie di software richiedono Location Permission.
Senza questa autorizzazione, l'applicazione non può determinare le coordinate del dispositivo con nessuno dei metodi disponibili: né tramite il modulo GPS, né tramite scansione Wi-Fi, né tramite posizionamento tramite torri cellulari. L'utente può revocare l'autorizzazione in qualsiasi momento nelle impostazioni di sistema, dopo di che l'applicazione deve gestire correttamente il rifiuto.
Secondo uno studio del Pew Research Center (2024), circa il 45% degli utenti revoca l'accesso alla geolocalizzazione nelle applicazioni che non lo utilizzano per la loro funzionalità principale. Ciò significa che lo sviluppatore deve giustificare chiaramente la richiesta e offrire meccanismi alternativi per coloro che hanno rifiutato Location Permission.
Il GDPR in Europa e la Legge Federale 152-FZ in Russia richiedono l'ottenimento del consenso informato per il trattamento dei dati di localizzazione. L'applicazione non deve solo richiedere l'autorizzazione tramite il dialogo di sistema, ma anche fornire un avviso separato sugli scopi della raccolta dei dati. La violazione di questi requisiti comporta multe fino a 20 milioni di euro o al 4% del fatturato annuo dell'azienda.
Se l'applicazione non richiede Location Permission o l'utente nega l'accesso, lo sviluppatore deve prevedere uno scenario alternativo. Per un'applicazione di mappe, potrebbe essere l'inserimento manuale dell'indirizzo; per un'app di consegna — la selezione da un elenco di indirizzi salvati; per un servizio meteorologico — la determinazione della città tramite indirizzo IP. Graceful degradation (degrado graduale) è una pratica standard raccomandata da Google e Apple.
I livelli di accesso alla geolocalizzazione differiscono su Android e iOS, sebbene l'idea generale sia la stessa: più preciso è l'accesso, più severi sono i requisiti che la piattaforma impone all'applicazione.
| Livello di accesso | Android | iOS |
|---|---|---|
| Durante l'uso | Solo quando l'app è attiva | When In Use — solo nell'app |
| In background | Always — costantemente, anche in background | Always — richiede revisione aggiuntiva App Store |
| Approssimativo | ACCESS_COARSE_LOCATION (precisione fino a 500 m) | Con opzione Precision = Off (iOS 14+) |
ACCESS_FINE_LOCATION fornisce accesso a coordinate GPS precise con un margine di errore fino a diversi metri. Per dichiarare questa autorizzazione nel manifest, si usa la costante android.permission.ACCESS_FINE_LOCATION. ACCESS_COARSE_LOCATION, invece, fornisce una posizione approssimativa con una precisione fino a 500 metri basata su dati Wi-Fi e torri cellulari.
When In Use permette all'applicazione di ricevere coordinate solo quando è aperta sullo schermo. Always fornisce accesso alla geolocalizzazione anche in background, ma richiede una revisione obbligatoria da parte dell'App Store. A partire da iOS 14, l'utente può disabilitare separatamente il posizionamento preciso per ogni applicazione tramite l'interruttore Precision.
La richiesta di Location Permission su Android avviene in due fasi: dichiarazione delle autorizzazioni nel manifest e richiesta a runtime nel codice. A partire da Android 6.0 (API 23), tutte le autorizzazioni pericolose vengono richieste durante l'esecuzione dell'applicazione, non durante l'installazione.
Il primo passo è aggiungere le autorizzazioni necessarie al file AndroidManifest.xml. Costanti diverse vengono utilizzate per il posizionamento preciso e approssimativo.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Dopo la dichiarazione nel manifest, il dialogo di sistema per la richiesta di autorizzazione deve essere chiamato nel codice dell'applicazione. Vediamo un esempio in Kotlin utilizzando Activity Result API.
private val locationPermissionRequest =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
when {
permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
// Autorizzazione concessa
getLocation()
}
permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
// Solo posizione approssimativa
getCoarseLocation()
}
else -> {
// Utente ha rifiutato
showLocationExplanation()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
checkLocationPermission()
}
Se l'utente nega l'accesso, il sistema Android non permette di mostrare nuovamente il dialogo automaticamente. Lo sviluppatore deve chiamare shouldShowRequestPermissionRationale per mostrare una spiegazione preliminare. In caso di rifiuto ripetuto con il flag Never Ask Again, l'utente deve essere reindirizzato alle impostazioni di sistema.
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 richiesta di Location Permission su iOS richiede l'aggiunta di chiavi speciali al file Info.plist e la chiamata di metodi della classe CLLocationManager. Apple presta particolare attenzione alla privacy, quindi il testo di spiegazione nel dialogo di richiesta deve essere il più specifico possibile.
Per richiedere la posizione su iOS, è necessario aggiungere una o entrambe le chiavi a Info.plist: NSLocationWhenInUseUsageDescription per l'accesso durante l'uso e NSLocationAlwaysAndWhenInUseUsageDescription per l'accesso in background. Il valore di ogni chiave è una stringa che verrà mostrata all'utente nel dialogo.
<key>NSLocationWhenInUseUsageDescription</key>
<string>La tua app ha bisogno della tua posizione per mostrare i punti vicini sulla mappa.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>La tua app ha bisogno dell'accesso alla geolocalizzazione in background per tracciare il percorso.</string>
Nel codice Swift, la richiesta viene effettuata tramite un'istanza di CLLocationManager. A seconda del livello di accesso richiesto, viene chiamato requestWhenInUseAuthorization o 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
}
}
}
A differenza di Android, iOS non fornisce allo sviluppatore un metodo per verificare shouldShowRequestPermissionRationale. Il sistema decide autonomamente quando mostrare la spiegazione. Inoltre, su iOS l'utente può modificare l'autorizzazione solo tramite le impostazioni di sistema — l'applicazione non può ri-mostrare il dialogo di sistema dopo che l'utente ha fatto una scelta. RequestAlwaysAuthorization richiede prima When In Use e poi, dopo aver ottenuto il primo consenso, un dialogo separato per l'accesso in background.
Le buone pratiche con Location Permission aiutano a ridurre i rifiuti degli utenti e a soddisfare i requisiti degli store di applicazioni. Google e Apple hanno pubblicato raccomandazioni il cui rispetto aumenta la probabilità di approvazione dell'applicazione.
Non mostrare il dialogo di richiesta di Location Permission immediatamente all'avvio dell'applicazione. Un utente che ha appena aperto l'app non capisce ancora perché deve fornire l'accesso alla geolocalizzazione. Contextual request significa che il dialogo appare nel momento in cui l'utente ha effettivamente bisogno di una funzione che richiede l'autorizzazione. Ad esempio, quando si clicca sul pulsante “Trova il negozio più vicino”.
Prima del dialogo di sistema, mostra la tua schermata di spiegazione (pre-permission screen). Su di essa, spiega perché l'app ha bisogno della geolocalizzazione, quali dati vengono raccolti e come verranno utilizzati. Dopo che l'utente ha cliccato su “Consenti” sulla tua schermata, mostra il dialogo di sistema. Secondo Appsflyer (2024), questo approccio aumenta il tasso di approvazione del 25-35%.
L'accesso in background alla geolocalizzazione è necessario solo per le applicazioni che funzionano in background: navigatori, tracker di attività, app di consegna. Se la tua applicazione ha bisogno di coordinate solo quando lo schermo è aperto, richiedi When In Use. L'App Store rifiuterà l'applicazione se Always non è giustificato funzionalmente. Su Android, l'accesso in background è ulteriormente regolato dall'autorizzazione ACCESS_BACKGROUND_LOCATION.
Domande frequenti
L'applicazione deve gestire correttamente il rifiuto e offrire uno scenario alternativo. Ad esempio, l'inserimento manuale dell'indirizzo o la determinazione della città tramite indirizzo IP. Il dialogo di sistema non viene mostrato di nuovo — è necessario reindirizzare l'utente alle impostazioni.
Tecnicamente, sì — il dialogo di sistema può essere attivato senza una schermata preliminare. Tuttavia, il tasso di approvazione senza spiegazione è del 30-40%, mentre con una schermata preliminare è del 60-75%. Apple e Google raccomandano di spiegare sempre il motivo della richiesta.
Usa ContextCompat.checkSelfPermission con la costante Manifest.permission.ACCESS_FINE_LOCATION. Il metodo restituisce PERMISSION_GRANTED o PERMISSION_DENIED, consentendo di determinare lo stato corrente senza chiamare il dialogo di sistema.
ACCESS_FINE_LOCATION fornisce accesso a coordinate GPS precise con un errore di 3-10 metri. ACCESS_COARSE_LOCATION fornisce una posizione approssimativa con una precisione fino a 500 metri basata su Wi-Fi e torri cellulari. Su Android 12+, lo sviluppatore può richiedere entrambe le autorizzazioni contemporaneamente.
Su Android, per scansionare dispositivi BLE è necessario ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION, poiché i segnali BLE possono essere utilizzati per la triangolazione della posizione. Su iOS, per BLE è sufficiente l'autorizzazione Bluetooth — Location Permission non è necessario.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche