Location Permission v mobilním vývoji: co to je, úrovně přístupu a princip fungování

Autor: IT Sectr Publikováno: 2026-05-21 Doba čtení: 8 min

Location Permission je oprávnění, které mobilní aplikace žádá od uživatele pro přístup k údajům o jeho geografické poloze. Bez tohoto oprávnění aplikace nemůže určit souřadnice zařízení, a tedy nemůže poskytovat funkce geolokace. Podle Apple Developer Documentation, 2024 jsou všechny aplikace používající lokalizační služby povinny žádat o výslovný souhlas uživatele prostřednictvím systémového dialogu.

Hlavní body

  • Location Permission — povinné oprávnění pro přístup k geolokaci zařízení v mobilních aplikacích.
  • Úrovně přístupu se dělí na přístup na pozadí a při používání aplikace na obou platformách.
  • Android používá ACCESS_FINE_LOCATION a ACCESS_COARSE_LOCATION pro přesné a přibližné určení souřadnic.
  • iOS vyžaduje přidání klíčů NSLocationWhenInUseUsageDescription a NSLocationAlwaysUsageDescription do Info.plist.
  • Žádost o oprávnění by měla obsahovat srozumitelné vysvětlení, proč aplikace potřebuje údaje o poloze.

Co je Location Permission?

Location Permission je mechanismus operačního systému, který reguluje přístup aplikací k údajům o geografické poloze zařízení. Bez výslovného souhlasu uživatele aplikace nemůže získat GPS souřadnice, údaje o Wi-Fi sítích nebo informace o mobilních základnových stanicích.

Mobilní platformy Android a iOS implementují vlastní systém oprávnění, ale obecná logika je stejná: aplikace deklaruje požadovaná oprávnění v manifestu nebo konfiguračním souboru a poté o ně žádá za běhu. Podle Android Developers, 2024 patří od Androidu 10 všechna oprávnění k geolokaci do kategorie nebezpečných a vyžadují žádost za běhu.

Důvodem tohoto přístupu je ochrana soukromí uživatelů. Údaje o poloze umožňují vytvářet trasy pohybu, určovat místa práce a odpočinku a také identifikovat osobu. Proto obě platformy vyžadují transparentní vysvětlení v dialogu žádosti: aplikace musí uvést důvod, proč potřebuje přístup ke geolokaci.

Proč je potřeba oprávnění k geolokaci

Oprávnění k geolokaci je nezbytné pro jakoukoli aplikaci, jejíž funkčnost závisí na znalosti fyzické polohy uživatele. Mapy a navigace, doručovací aplikace, meteorologické služby, sociální sítě s geotagy — všechny tyto kategorie softwaru vyžadují Location Permission.

Bez tohoto oprávnění aplikace nemůže určit souřadnice zařízení žádným z dostupných způsobů: ani přes GPS modul, ani skenováním Wi-Fi, ani určením polohy na základě mobilních základnových stanic. Uživatel může kdykoli odebrat oprávnění v systémových nastaveních, načež aplikace musí odmítnutí správně zpracovat.

Podle výzkumu Pew Research Center (2024) přibližně 45 % uživatelů odebírá přístup ke geolokaci v aplikacích, které ji nepoužívají pro hlavní funkčnost. To znamená, že vývojář musí jasně zdůvodnit žádost a nabídnout alternativní mechanismy pro ty, kteří Location Permission odmítli.

Právní požadavky

GDPR v Evropě a zákon 152-FZ v Rusku vyžadují získání informovaného souhlasu pro zpracování údajů o poloze. Aplikace musí nejen požádat o oprávnění prostřednictvím systémového dialogu, ale také poskytnout samostatné oznámení o účelech shromažďování údajů. Porušení těchto požadavků má za následek pokuty až 20 milionů eur nebo 4 % ročního obratu společnosti.

Důsledky chybějícího oprávnění

Pokud aplikace nežádá o Location Permission nebo uživatel odmítne přístup, musí vývojář zajistit záložní scénář. Pro mapovou aplikaci to může být ruční zadání adresy, pro doručovací aplikaci — výběr ze seznamu uložených adres, pro meteorologickou službu — určení města na základě IP adresy. Graceful degradation (plynulá degradace) je standardní praxí doporučovanou Googlem a Applem.

Úrovně přístupu ke geolokaci

Úrovně přístupu ke geolokaci se liší na Androidu a iOS, i když obecná myšlenka je stejná: čím přesnější přístup, tím přísnější požadavky platforma na aplikaci klade.

Úroveň přístupuAndroidiOS
Při používáníPouze když je aplikace aktivníWhen In Use — pouze v aplikaci
Na pozadíAlways — neustále, i na pozadíAlways — vyžaduje dodatečnou kontrolu App Store
PřibližnýACCESS_COARSE_LOCATION (přesnost do 500 m)S možností Precision = Off (iOS 14+)

ACCESS_FINE_LOCATION a ACCESS_COARSE_LOCATION na Androidu

ACCESS_FINE_LOCATION poskytuje přístup k přesným GPS souřadnicím s chybou několika metrů. Pro deklarování tohoto oprávnění v manifestu se používá konstanta android.permission.ACCESS_FINE_LOCATION. ACCESS_COARSE_LOCATION naopak poskytuje přibližnou polohu s přesností do 500 metrů na základě Wi-Fi a mobilních základnových stanic.

When In Use a Always na iOS

When In Use (při používání) umožňuje aplikaci získávat souřadnice pouze tehdy, když je otevřená na obrazovce. Always (vždy) poskytuje přístup ke geolokaci i v režimu na pozadí, ale vyžaduje povinnou revizi v App Store. Od iOS 14 může uživatel samostatně vypnout přesné určování polohy pro každou aplikaci pomocí přepínače Precision.

Žádost o Location Permission na Androidu

Žádost o Location Permission na Androidu se provádí ve dvou fázích: deklarace oprávnění v manifestu a žádost za běhu v kódu. Od Androidu 6.0 (API 23) jsou všechna nebezpečná oprávnění vyžadována během provozu aplikace, nikoli při instalaci.

Deklarace v manifestu

Prvním krokem je přidání potřebných oprávnění do souboru AndroidManifest.xml. Pro přesné a přibližné určování polohy se používají různé konstanty.

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

Žádost za běhu v Kotlinu

Po deklaraci v manifestu je třeba vyvolat systémový dialog žádosti o oprávnění v kódu aplikace. Podívejme se na příklad v Kotlinu s použitím Activity Result API.

kotlin
private val locationPermissionRequest =
    registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
    when {
        permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
            // Oprávnění získáno
            getLocation()
        }
        permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
            // Pouze přibližná poloha
            getCoarseLocation()
        }
        else -> {
            // Uživatel odmítl
            showLocationExplanation()
        }
    }
}

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

Zpracování odmítnutí a opakovaná žádost

Pokud uživatel odmítl přístup, systém Android neumožňuje automatické opětovné zobrazení dialogu. Vývojář musí zavolat shouldShowRequestPermissionRationale pro zobrazení předběžného vysvětlení. Při opakovaném odmítnutí s příznakem Never Ask Again je třeba uživatele přesměrovat do systémových nastavení.

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

Žádost o Location Permission na iOS

Žádost o Location Permission na iOS vyžaduje přidání speciálních klíčů do souboru Info.plist a zavolání metody třídy CLLocationManager. Apple věnuje zvláštní pozornost soukromí, proto musí být text vysvětlení v dialogu žádosti co nejkonkrétnější.

Nastavení Info.plist

Pro vyžádání polohy na iOS je třeba přidat jeden nebo oba klíče do Info.plist: NSLocationWhenInUseUsageDescription pro přístup při používání a NSLocationAlwaysAndWhenInUseUsageDescription pro přístup na pozadí. Hodnotou každého klíče je řetězec, který bude uživateli zobrazen v dialogu.

xml
<key>NSLocationWhenInUseUsageDescription</key>
<string>Aplikace potřebuje vaši polohu k zobrazení nejbližších bodů na mapě.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Aplikace potřebuje přístup ke geolokaci na pozadí pro sledování trasy.</string>

Žádost ve Swiftu

Ve Swift kódu je žádost provedena prostřednictvím instance CLLocationManager. V závislosti na požadované úrovni přístupu se volá requestWhenInUseAuthorization nebo 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
        }
    }
}

Rozdíl mezi platformami

Na rozdíl od Androidu, iOS neposkytuje vývojáři metodu pro kontrolu shouldShowRequestPermissionRationale. Systém sám rozhoduje, kdy zobrazit vysvětlení. Kromě toho, na iOS může uživatel změnit oprávnění pouze prostřednictvím systémových nastavení — aplikace nemůže znovu vyvolat systémový dialog poté, co uživatel provedl volbu. RequestAlwaysAuthorization nejprve žádá When In Use a poté, po získání prvního souhlasu, samostatný dialog pro přístup na pozadí.

Nejlepší postupy práce s geolokací

Nejlepší postupy práce s Location Permission pomáhají snížit počet odmítnutí uživatelů a splnit požadavky obchodů s aplikacemi. Google a Apple zveřejnily doporučení, jejichž dodržování zvyšuje pravděpodobnost schválení aplikace.

Žádejte o oprávnění v kontextu

Nezobrazujte dialog žádosti o Location Permission ihned při spuštění aplikace. Uživatel, který právě otevřel aplikaci, ještě nechápe, proč má poskytnout přístup ke geolokaci. Contextual request znamená, že se dialog objeví v okamžiku, kdy uživatel skutečně potřebuje funkci vyžadující oprávnění. Například při stisknutí tlačítka “Najít nejbližší obchod”.

Vysvětlete důvod předem

Před systémovým dialogem zobrazte vlastní vysvětlovací obrazovku (pre-permission screen). Na ní vysvětlete, proč aplikace potřebuje geolokaci, jaká data jsou shromažďována a jak budou použita. Poté, co uživatel klikne na “Povolit” na vaší obrazovce, zobrazte systémový dialog. Podle údajů Appsflyer (2024) tento přístup zvyšuje konverzi souhlasu o 25-35%.

Nežádejte o Always zbytečně

Přístup na pozadí ke geolokaci je potřebný pouze pro aplikace pracující na pozadí: navigátory, sledovače aktivit, doručovací aplikace. Pokud vaše aplikace potřebuje souřadnice pouze při otevřené obrazovce, žádejte When In Use. App Store aplikaci zamítne, pokud Always není funkčně odůvodněno. Na Androidu je přístup na pozadí dodatečně regulován oprávněním ACCESS_BACKGROUND_LOCATION.

Často kladené otázky

Co se stane, když uživatel odmítne Location Permission?

Aplikace musí odmítnutí správně zpracovat a nabídnout alternativní scénář. Například ruční zadání adresy nebo určení města na základě IP adresy. Systémový dialog se znovu nezobrazuje — je třeba uživatele přesměrovat do nastavení.

Lze žádat o Location Permission bez vysvětlení?

Technicky ano, systémový dialog lze vyvolat bez předchozí obrazovky. Nicméně konverze souhlasu bez vysvětlení činí 30-40%, zatímco s předchozí obrazovkou 60-75%. Apple a Google doporučují vždy vysvětlit důvod žádosti.

Jak zkontrolovat stav Location Permission na Androidu?

Použijte ContextCompat.checkSelfPermission s konstantou Manifest.permission.ACCESS_FINE_LOCATION. Metoda vrací PERMISSION_GRANTED nebo PERMISSION_DENIED, což umožňuje určit aktuální stav bez vyvolání systémového dialogu.

Jaký je rozdíl mezi ACCESS_FINE_LOCATION a ACCESS_COARSE_LOCATION?

ACCESS_FINE_LOCATION poskytuje přístup k přesným GPS souřadnicím s chybou 3-10 metrů. ACCESS_COARSE_LOCATION poskytuje přibližnou polohu s přesností do 500 metrů na základě Wi-Fi a mobilních základnových stanic. Na Androidu 12+ může vývojář žádat o obě oprávnění současně.

Je Location Permission vyžadován pro BLE skenery?

Na Androidu je pro skenování BLE zařízení vyžadován ACCESS_FINE_LOCATION nebo ACCESS_COARSE_LOCATION, protože BLE signály mohou být použity pro triangulaci polohy. Na iOS pro BLE stačí oprávnění Bluetooth, Location Permission není vyžadován.

Shrnutí

  • Location Permission — klíčový mechanismus ochrany soukromí, který reguluje přístup aplikací ke geolokaci zařízení.
  • Úrovně přístupu zahrnují při používání (When In Use) a na pozadí (Always) na iOS, stejně jako přesný (ACCESS_FINE_LOCATION) a přibližný (ACCESS_COARSE_LOCATION) na Androidu.
  • Android vyžaduje deklaraci oprávnění v manifestu a žádost za běhu prostřednictvím Activity Result API od API 23.
  • iOS vyžaduje přidání klíčů do Info.plist a volání metod CLLocationManager s povinným uvedením důvodu v textu žádosti.
  • Contextual request — nejlepší praxe, při které se dialog objeví v okamžiku potřeby, nikoli při spuštění aplikace.
  • Pre-permission screen zvyšuje konverzi souhlasu o 25-35% podle údajů Appsflyer (2024).
  • Odmítnutí uživatelem vyžaduje graceful degradation — alternativní scénář bez použití geolokace.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také