Location Permission în dezvoltarea mobilă: ce este, niveluri de acces și principiul de funcționare

Autor: IT Sectr Publicat: 2026-05-21 Timp de citire: 8 min

Location Permission este permisiunea pe care o aplicație mobilă o solicită utilizatorului pentru a accesa datele despre poziția sa geografică. Fără această permisiune, aplicația nu poate determina coordonatele dispozitivului și, prin urmare, nu poate oferi funcții de geolocalizare. Potrivit Apple Developer Documentation, 2024, toate aplicațiile care utilizează servicii de localizare sunt obligate să solicite consimțământul explicit al utilizatorului printr-un dialog de sistem.

Principalele aspecte

  • Location Permission — permisiunea obligatorie pentru accesul la poziția geografică a dispozitivului în aplicațiile mobile.
  • Nivelurile de acces se împart în fundal și în timpul utilizării aplicației pe ambele platforme.
  • Android utilizează ACCESS_FINE_LOCATION și ACCESS_COARSE_LOCATION pentru determinarea precisă și aproximativă a coordonatelor.
  • iOS necesită adăugarea cheilor NSLocationWhenInUseUsageDescription și NSLocationAlwaysUsageDescription în Info.plist.
  • Solicitarea permisiunii trebuie să conțină o explicație clară despre motivul pentru care aplicația are nevoie de datele de localizare.

Ce este Location Permission?

Location Permission este un mecanism al sistemului de operare care reglementează accesul aplicațiilor la datele despre poziția geografică a dispozitivului. Fără consimțământul explicit al utilizatorului, aplicația nu poate obține coordonate GPS, date despre rețelele Wi-Fi sau informații despre turnurile de telefonie mobilă.

Platformele mobile Android și iOS implementează propriul sistem de permisiuni, dar logica generală este aceeași: aplicația declară permisiunile necesare în manifest sau fișierul de configurare, apoi le solicită în timpul execuției. Potrivit Android Developers, 2024, începând cu Android 10, toate permisiunile de geolocalizare aparțin categoriei periculoase și necesită solicitare în timpul execuției.

Motivul acestei abordări este protejarea confidențialității utilizatorilor. Datele de localizare permit construirea rutelor de deplasare, determinarea locurilor de muncă și odihnă, precum și identificarea persoanei. De aceea, ambele platforme necesită o explicație transparentă în dialogul de solicitare: aplicația trebuie să indice motivul pentru care are nevoie de acces la geolocalizare.

De ce este necesară permisiunea de geolocalizare

Permisiunea de geolocalizare este necesară pentru orice aplicație a cărei funcționalitate depinde de cunoașterea poziției fizice a utilizatorului. Hărți și navigație, aplicații de livrare, servicii meteo, rețele sociale cu geoetichetare — toate aceste categorii de programe necesită Location Permission.

Fără această permisiune, aplicația nu poate determina coordonatele dispozitivului prin niciuna dintre metodele disponibile: nici prin modulul GPS, nici prin scanarea Wi-Fi, nici prin determinarea poziției pe baza turnurilor de telefonie mobilă. Utilizatorul poate oricând retrage permisiunea în setările de sistem, după care aplicația trebuie să gestioneze corect refuzul.

Potrivit cercetării Pew Research Center (2024), aproximativ 45% dintre utilizatori retrag accesul la geolocalizare în aplicațiile care nu o folosesc pentru funcționalitatea principală. Aceasta înseamnă că dezvoltatorul trebuie să justifice clar solicitarea și să ofere mecanisme alternative pentru cei care au refuzat Location Permission.

Cerințe legale

GDPR în Europa și legea 152-FZ în Rusia necesită obținerea consimțământului informat pentru prelucrarea datelor de localizare. Aplicația trebuie nu doar să solicite permisiunea prin dialogul de sistem, ci și să ofere o notificare separată despre scopurile colectării datelor. Încălcarea acestor cerințe atrage amenzi de până la 20 de milioane de euro sau 4% din cifra de afaceri anuală a companiei.

Consecințele lipsei permisiunii

Dacă aplicația nu solicită Location Permission sau utilizatorul refuză accesul, dezvoltatorul trebuie să prevadă un scenariu de rezervă. Pentru o aplicație de hărți, aceasta poate fi introducerea manuală a adresei, pentru o aplicație de livrare — selectarea dintr-o listă de adrese salvate, pentru un serviciu meteo — determinarea orașului pe baza adresei IP. Graceful degradation (degradarea elegantă) este o practică standard recomandată de Google și Apple.

Nivelurile de acces la geolocalizare

Nivelurile de acces la geolocalizare diferă pe Android și iOS, deși ideea generală este aceeași: cu cât accesul este mai precis, cu atât platforma impune cerințe mai stricte aplicației.

Nivel de accesAndroidiOS
În timpul utilizăriiDoar când aplicația este activăWhen In Use — doar în aplicație
În fundalAlways — permanent, chiar și în fundalAlways — necesită verificare suplimentară App Store
AproximativACCESS_COARSE_LOCATION (precizie până la 500 m)Cu opțiunea Precision = Off (iOS 14+)

ACCESS_FINE_LOCATION și ACCESS_COARSE_LOCATION pe Android

ACCESS_FINE_LOCATION oferă acces la coordonate GPS precise cu o eroare de până la câțiva metri. Pentru declararea acestei permisiuni în manifest se utilizează constanta android.permission.ACCESS_FINE_LOCATION. ACCESS_COARSE_LOCATION, la rândul său, oferă o localizare aproximativă cu o precizie de până la 500 de metri pe baza datelor Wi-Fi și a turnurilor de telefonie mobilă.

When In Use și Always pe iOS

When In Use (în timpul utilizării) permite aplicației să obțină coordonate doar atunci când este deschisă pe ecran. Always (întotdeauna) oferă acces la geolocalizare chiar și în modul fundal, dar necesită o revizuire obligatorie în App Store. Începând cu iOS 14, utilizatorul poate dezactiva separat poziționarea precisă pentru fiecare aplicație prin comutatorul Precision.

Solicitarea Location Permission pe Android

Solicitarea Location Permission pe Android se realizează în două etape: declararea permisiunilor în manifest și solicitarea în timpul execuției în cod. Începând cu Android 6.0 (API 23), toate permisiunile periculoase sunt solicitate în timpul funcționării aplicației, nu la instalare.

Declararea în manifest

Primul pas este adăugarea permisiunilor necesare în fișierul AndroidManifest.xml. Pentru poziționarea precisă și aproximativă se utilizează constante diferite.

xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

Solicitarea în timpul execuției în Kotlin

După declararea în manifest, este necesar să se apeleze dialogul de sistem de solicitare a permisiunii în codul aplicației. Să analizăm un exemplu în Kotlin folosind Activity Result API.

kotlin
private val locationPermissionRequest =
    registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
    when {
        permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
            // Permisiune acordată
            getLocation()
        }
        permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
            // Doar locație aproximativă
            getCoarseLocation()
        }
        else -> {
            // Utilizatorul a refuzat
            showLocationExplanation()
        }
    }
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    checkLocationPermission()
}

Gestionarea refuzului și solicitarea repetată

Dacă utilizatorul a refuzat accesul, sistemul Android nu permite afișarea automată repetată a dialogului. Dezvoltatorul trebuie să apeleze shouldShowRequestPermissionRationale pentru a afișa o explicație preliminară. În cazul unui refuz repetat cu flagul Never Ask Again, utilizatorul trebuie redirecționat către setările de sistem.

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

Solicitarea Location Permission pe iOS

Solicitarea Location Permission pe iOS necesită adăugarea unor chei speciale în fișierul Info.plist și apelarea metodei clasei CLLocationManager. Apple acordă o atenție deosebită confidențialității, de aceea textul explicației din dialogul de solicitare trebuie să fie cât mai specific.

Configurarea Info.plist

Pentru a solicita localizarea pe iOS, trebuie adăugată una sau ambele chei în Info.plist: NSLocationWhenInUseUsageDescription pentru accesul în timpul utilizării și NSLocationAlwaysAndWhenInUseUsageDescription pentru accesul în fundal. Valoarea fiecărei chei este un șir de caractere care va fi afișat utilizatorului în dialog.

xml
<key>NSLocationWhenInUseUsageDescription</key>
<string>Aplicația are nevoie de locația dvs. pentru a afișa cele mai apropiate puncte pe hartă.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Aplicația are nevoie de acces la geolocalizare în fundal pentru urmărirea rutei.</string>

Solicitarea în Swift

În codul Swift, solicitarea se realizează printr-o instanță a CLLocationManager. În funcție de nivelul de acces necesar, se apelează requestWhenInUseAuthorization sau requestAlwaysAuthorization.

swift
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
        }
    }
}

Diferența dintre platforme

Spre deosebire de Android, iOS nu oferă dezvoltatorului o metodă pentru verificarea shouldShowRequestPermissionRationale. Sistemul decide singur când să afișeze explicația. În plus, pe iOS, utilizatorul poate modifica permisiunea doar prin setările de sistem — aplicația nu poate apela din nou dialogul de sistem după ce utilizatorul a făcut o alegere. RequestAlwaysAuthorization solicită mai întâi When In Use, iar apoi, după obținerea primului consimțământ, un dialog separat pentru accesul în fundal.

Cele mai bune practici de lucru cu geolocalizarea

Cele mai bune practici de lucru cu Location Permission ajută la reducerea refuzurilor utilizatorilor și la îndeplinirea cerințelor magazinelor de aplicații. Google și Apple au publicat recomandări a căror respectare crește probabilitatea de aprobare a aplicației.

Solicitați permisiunea în context

Nu afișați dialogul de solicitare a Location Permission imediat la lansarea aplicației. Utilizatorul care tocmai a deschis aplicația încă nu înțelege de ce trebuie să ofere acces la geolocalizare. Contextual request presupune că dialogul apare în momentul în care utilizatorul are cu adevărat nevoie de funcția care necesită permisiunea. De exemplu, la apăsarea butonului „Găsește cel mai apropiat magazin”.

Explicați motivul din timp

Înainte de dialogul de sistem, afișați propriul ecran de explicație (pre-permission screen). Pe acesta, spuneți de ce aplicația are nevoie de geolocalizare, ce date sunt colectate și cum vor fi utilizate. După ce utilizatorul face clic pe „Permite” pe ecranul dvs., afișați dialogul de sistem. Potrivit datelor Appsflyer (2024), această abordare crește rata de conversie a consimțământului cu 25-35%.

Nu solicitați Always fără necesitate

Accesul în fundal la geolocalizare este necesar doar aplicațiilor care funcționează în fundal: navigatoare, trackere de activitate, aplicații de livrare. Dacă aplicația dvs. are nevoie de coordonate doar când ecranul este deschis, solicitați When In Use. App Store va respinge aplicația dacă Always nu este justificat funcțional. Pe Android, accesul în fundal este reglementat suplimentar prin permisiunea ACCESS_BACKGROUND_LOCATION.

Întrebări frecvente

Ce se întâmplă dacă utilizatorul refuză Location Permission?

Aplicația trebuie să gestioneze corect refuzul și să ofere un scenariu alternativ. De exemplu, introducerea manuală a adresei sau determinarea orașului pe baza adresei IP. Dialogul de sistem nu se afișează din nou — este necesară redirecționarea utilizatorului către setări.

Se poate solicita Location Permission fără explicație?

Tehnic da, dialogul de sistem poate fi apelat fără un ecran preliminar. Cu toate acestea, rata de conversie a consimțământului fără explicație este de 30-40%, în timp ce cu un ecran preliminar este de 60-75%. Apple și Google recomandă întotdeauna explicarea motivului solicitării.

Cum se verifică starea Location Permission pe Android?

Utilizați ContextCompat.checkSelfPermission cu constanta Manifest.permission.ACCESS_FINE_LOCATION. Metoda returnează PERMISSION_GRANTED sau PERMISSION_DENIED, ceea ce permite determinarea stării curente fără a apela dialogul de sistem.

Care este diferența dintre ACCESS_FINE_LOCATION și ACCESS_COARSE_LOCATION?

ACCESS_FINE_LOCATION oferă acces la coordonate GPS precise cu o eroare de 3-10 metri. ACCESS_COARSE_LOCATION oferă o localizare aproximativă cu o precizie de până la 500 de metri pe baza Wi-Fi și a turnurilor de telefonie mobilă. Pe Android 12+, dezvoltatorul poate solicita ambele permisiuni simultan.

Este necesar Location Permission pentru scanerele BLE?

Pe Android, pentru scanarea dispozitivelor BLE este necesar ACCESS_FINE_LOCATION sau ACCESS_COARSE_LOCATION, deoarece semnalele BLE pot fi utilizate pentru triangularea poziției. Pe iOS, pentru BLE este suficientă permisiunea Bluetooth, Location Permission nu este necesar.

Concluzii

  • Location Permission — mecanismul cheie de protecție a confidențialității care reglementează accesul aplicațiilor la poziția geografică a dispozitivului.
  • Nivelurile de acces includ în timpul utilizării (When In Use) și în fundal (Always) pe iOS, precum și precis (ACCESS_FINE_LOCATION) și aproximativ (ACCESS_COARSE_LOCATION) pe Android.
  • Android necesită declararea permisiunilor în manifest și solicitarea în timpul execuției prin Activity Result API începând cu API 23.
  • iOS necesită adăugarea cheilor în Info.plist și apelarea metodelor CLLocationManager cu indicarea obligatorie a motivului în textul solicitării.
  • Contextual request — cea mai bună practică, în care dialogul apare în momentul necesității, nu la lansarea aplicației.
  • Pre-permission screen crește rata de conversie a consimțământului cu 25-35% conform datelor Appsflyer (2024).
  • Refuzul utilizatorului necesită graceful degradation — un scenariu alternativ fără utilizarea geolocalizării.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și