Location Permission w rozwoju mobilnym: co to jest, typy dostępu i zasada działania

Autor: IT Sectr Opublikowano: 2026-05-21 Czas czytania: 8 min

Location Permission to uprawnienie, które aplikacja mobilna prosi użytkownika o dostęp do danych o jego położeniu geograficznym. Bez tego uprawnienia aplikacja nie może określić współrzędnych urządzenia, a tym samym nie będzie mogła świadczyć funkcji geolokalizacji. Według Apple Developer Documentation, 2024, wszystkie aplikacje korzystające z usług lokalizacyjnych są zobowiązane do żądania wyraźnej zgody użytkownika za pomocą okna systemowego.

Najważniejsze

  • Location Permission — obowiązkowe uprawnienie dostępu do geopozycji urządzenia w aplikacjach mobilnych.
  • Poziomy dostępu dzielą się na dostęp w tle i podczas korzystania z aplikacji na obu platformach.
  • Android używa ACCESS_FINE_LOCATION i ACCESS_COARSE_LOCATION do dokładnego i przybliżonego określania współrzędnych.
  • iOS wymaga dodania kluczy NSLocationWhenInUseUsageDescription i NSLocationAlwaysUsageDescription w Info.plist.
  • Żądanie uprawnienia powinno zawierać zrozumiałe wyjaśnienie, dlaczego aplikacja potrzebuje danych o lokalizacji.

Co to jest Location Permission?

Location Permission to mechanizm systemu operacyjnego, który reguluje dostęp aplikacji do danych o położeniu geograficznym urządzenia. Bez wyraźnej zgody użytkownika aplikacja nie może uzyskać współrzędnych GPS, danych sieci Wi-Fi ani informacji o stacjach bazowych telefonii komórkowej.

Platformy mobilne Android i iOS implementują własny system uprawnień, ale ogólna logika jest taka sama: aplikacja deklaruje wymagane uprawnienia w manifeście lub pliku konfiguracyjnym, a następnie żąda ich w czasie wykonywania. Według Android Developers, 2024, począwszy od Androida 10 wszystkie uprawnienia do geolokalizacji należą do kategorii niebezpiecznych i wymagają żądania w czasie wykonywania.

Przyczyną takiego podejścia jest ochrona prywatności użytkowników. Dane o lokalizacji umożliwiają tworzenie tras przemieszczania się, określanie miejsc pracy i odpoczynku, a także identyfikację osoby. Dlatego obie platformy wymagają przejrzystego wyjaśnienia w oknie żądania: aplikacja musi podać powód, dla którego potrzebuje dostępu do geolokalizacji.

Po co potrzebne jest uprawnienie do geolokalizacji

Uprawnienie do geolokalizacji jest niezbędne dla każdej aplikacji, której funkcjonalność zależy od znajomości fizycznego położenia użytkownika. Mapy i nawigacja, aplikacje dostawy, serwisy pogodowe, sieci społecznościowe z geotagowaniem — wszystkie te kategorie programów wymagają Location Permission.

Bez tego uprawnienia aplikacja nie może określić współrzędnych urządzenia żadnym z dostępnych sposobów: ani przez moduł GPS, ani przez skanowanie Wi-Fi, ani przez określenie położenia na podstawie stacji bazowych telefonii komórkowej. Użytkownik może w każdej chwili cofnąć uprawnienie w ustawieniach systemowych, po czym aplikacja musi poprawnie obsłużyć odmowę.

Według badań Pew Research Center (2024), około 45% użytkowników cofa dostęp do geolokalizacji w aplikacjach, które nie wykorzystują jej do głównego funkcjonowania. Oznacza to, że programista musi jasno uzasadnić żądanie i zaproponować alternatywne mechanizmy dla tych, którzy odmówili Location Permission.

Wymagania prawne

RODO w Europie oraz ustawa 152-FZ w Rosji wymagają uzyskania świadomej zgody na przetwarzanie danych o lokalizacji. Aplikacja musi nie tylko poprosić o uprawnienie przez okno systemowe, ale także przedstawić oddzielne powiadomienie o celach zbierania danych. Naruszenie tych wymogów grozi karami do 20 milionów euro lub 4% rocznego obrotu firmy.

Konsekwencje braku uprawnienia

Jeśli aplikacja nie żąda Location Permission lub użytkownik odmawia dostępu, programista musi przewidzieć scenariusz zapasowy. Dla aplikacji mapowej może to być ręczne wprowadzenie adresu, dla aplikacji dostawy — wybór z listy zapisanych adresów, dla serwisu pogodowego — określenie miasta na podstawie adresu IP. Graceful degradation (łagodna degradacja) to standardowa praktyka zalecana przez Google i Apple.

Poziomy dostępu do geolokalizacji

Poziomy dostępu do geolokalizacji różnią się na Android i iOS, choć ogólna idea jest taka sama: im dokładniejszy dostęp, tym bardziej rygorystyczne wymagania platforma stawia aplikacji.

Poziom dostępuAndroidiOS
Podczas użytkowaniaTylko gdy aplikacja jest aktywnaWhen In Use — tylko w aplikacji
W tleAlways — stale, nawet w tleAlways — wymaga dodatkowej weryfikacji App Store
PrzybliżonyACCESS_COARSE_LOCATION (dokładność do 500 m)Z opcją Precision = Off (iOS 14+)

ACCESS_FINE_LOCATION i ACCESS_COARSE_LOCATION na Android

ACCESS_FINE_LOCATION zapewnia dostęp do dokładnych współrzędnych GPS z błędem do kilku metrów. Do zadeklarowania tego uprawnienia w manifeście używa się stałej android.permission.ACCESS_FINE_LOCATION. ACCESS_COARSE_LOCATION z kolei zapewnia przybliżoną lokalizację z dokładnością do 500 metrów na podstawie danych Wi-Fi i stacji bazowych.

When In Use i Always na iOS

When In Use (podczas użytkowania) pozwala aplikacji uzyskiwać współrzędne tylko wtedy, gdy jest otwarta na ekranie. Always (zawsze) daje dostęp do geolokalizacji nawet w tle, ale wymaga obowiązkowego przejścia recenzji w App Store. Począwszy od iOS 14, użytkownik może osobno wyłączyć dokładne pozycjonowanie dla każdej aplikacji za pomocą przełącznika Precision.

Żądanie Location Permission na Android

Żądanie Location Permission na Android odbywa się w dwóch etapach: deklaracja uprawnień w manifeście i żądanie w czasie wykonywania w kodzie. Począwszy od Androida 6.0 (API 23), wszystkie niebezpieczne uprawnienia są żądane podczas działania aplikacji, a nie podczas instalacji.

Deklaracja w manifeście

Pierwszym krokiem jest dodanie niezbędnych uprawnień do pliku AndroidManifest.xml. Do dokładnego i przybliżonego pozycjonowania używane są różne stałe.

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

Żądanie w czasie wykonywania w Kotlin

Po deklaracji w manifeście należy wywołać systemowe okno żądania uprawnienia w kodzie aplikacji. Rozważmy przykład w Kotlin z użyciem Activity Result API.

kotlin
private val locationPermissionRequest =
    registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
    when {
        permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
            // Uprawnienie przyznane
            getLocation()
        }
        permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
            // Tylko przybliżona lokalizacja
            getCoarseLocation()
        }
        else -> {
            // Użytkownik odmówił
            showLocationExplanation()
        }
    }
}

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

Obsługa odmowy i ponowne żądanie

Jeśli użytkownik odmówił dostępu, system Android nie pozwala automatycznie ponownie wyświetlić okna. Programista musi wywołać shouldShowRequestPermissionRationale w celu wyświetlenia wstępnego wyjaśnienia. W przypadku ponownej odmowy z flagą Never Ask Again należy przekierować użytkownika do ustawień systemowych.

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

Żądanie Location Permission na iOS

Żądanie Location Permission na iOS wymaga dodania specjalnych kluczy do pliku Info.plist i wywołania metody klasy CLLocationManager. Apple przywiązuje szczególną wagę do prywatności, dlatego tekst wyjaśnienia w oknie żądania musi być jak najbardziej konkretny.

Konfiguracja Info.plist

Aby zażądać lokalizacji na iOS, należy dodać jeden lub oba klucze w Info.plist: NSLocationWhenInUseUsageDescription dla dostępu podczas użytkowania i NSLocationAlwaysAndWhenInUseUsageDescription dla dostępu w tle. Wartością każdego klucza jest ciąg znaków, który zostanie wyświetlony użytkownikowi w oknie.

xml
<key>NSLocationWhenInUseUsageDescription</key>
<string>Aplikacja potrzebuje Twojej lokalizacji, aby wyświetlić najbliższe punkty na mapie.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Aplikacja potrzebuje dostępu do geolokalizacji w tle do śledzenia trasy.</string>

Żądanie w Swift

W kodzie Swift żądanie odbywa się za pomocą instancji CLLocationManager. W zależności od wymaganego poziomu dostępu wywoływana jest metoda requestWhenInUseAuthorization lub 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
        }
    }
}

Różnice między platformami

W przeciwieństwie do Androida, iOS nie udostępnia programiście metody do sprawdzenia shouldShowRequestPermissionRationale. System sam decyduje, kiedy wyświetlić wyjaśnienie. Ponadto na iOS użytkownik może zmienić uprawnienie tylko przez ustawienia systemowe — aplikacja nie może ponownie wywołać okna systemowego po tym, jak użytkownik dokonał wyboru. RequestAlwaysAuthorization najpierw żąda When In Use, a następnie, po uzyskaniu pierwszej zgody, osobne okno na dostęp w tle.

Najlepsze praktyki pracy z geolokalizacją

Najlepsze praktyki pracy z Location Permission pomagają zmniejszyć liczbę odmów użytkowników i spełniać wymagania sklepów z aplikacjami. Google i Apple opublikowały zalecenia, których przestrzeganie zwiększa szanse na zatwierdzenie aplikacji.

Żądaj uprawnienia w kontekście

Nie wyświetlaj okna żądania Location Permission natychmiast po uruchomieniu aplikacji. Użytkownik, który właśnie otworzył aplikację, jeszcze nie rozumie, po co ma udostępniać geolokalizację. Contextual request zakłada, że okno pojawia się w momencie, gdy użytkownik naprawdę potrzebuje funkcji wymagającej uprawnienia. Na przykład po naciśnięciu przycisku „Znajdź najbliższy sklep”.

Wyjaśniaj powód z wyprzedzeniem

Przed oknem systemowym pokaż własny ekran wyjaśnienia (pre-permission screen). Opowiedz na nim, po co aplikacji geolokalizacja, jakie dane są zbierane i jak będą wykorzystywane. Gdy użytkownik kliknie „Zezwól” na Twoim ekranie, pokaż okno systemowe. Według danych Appsflyer (2024), takie podejście zwiększa konwersję zgody o 25-35%.

Nie żądaj Always bez potrzeby

Dostęp w tle do geolokalizacji jest potrzebny tylko aplikacjom działającym w tle: nawigatorom, trackerom aktywności, aplikacjom dostawy. Jeśli Twoja aplikacja potrzebuje współrzędnych tylko przy otwartym ekranie, żądaj When In Use. App Store odrzuci aplikację, jeśli Always nie jest uzasadnione funkcjonalnie. Na Android dostęp w tle jest dodatkowo regulowany przez uprawnienie ACCESS_BACKGROUND_LOCATION.

Często zadawane pytania

Co się stanie, jeśli użytkownik odmówi Location Permission?

Aplikacja musi poprawnie obsłużyć odmowę i zaproponować alternatywny scenariusz. Na przykład ręczne wprowadzenie adresu lub określenie miasta na podstawie adresu IP. Okno systemowe nie jest ponownie wyświetlane — należy przekierować użytkownika do ustawień.

Czy można żądać Location Permission bez wyjaśnienia?

Technicznie tak, okno systemowe można wywołać bez ekranu wstępnego. Jednak konwersja zgody bez wyjaśnienia wynosi 30-40%, podczas gdy z ekranem wstępnym — 60-75%. Apple i Google zalecają zawsze wyjaśniać powód żądania.

Jak sprawdzić status Location Permission na Android?

Użyj ContextCompat.checkSelfPermission ze stałą Manifest.permission.ACCESS_FINE_LOCATION. Metoda zwraca PERMISSION_GRANTED lub PERMISSION_DENIED, co pozwala określić bieżący status bez wywoływania okna systemowego.

Czym różni się ACCESS_FINE_LOCATION od ACCESS_COARSE_LOCATION?

ACCESS_FINE_LOCATION zapewnia dostęp do dokładnych współrzędnych GPS z błędem 3-10 metrów. ACCESS_COARSE_LOCATION zapewnia przybliżoną lokalizację z dokładnością do 500 metrów na podstawie Wi-Fi i stacji bazowych. Na Android 12+ programista może żądać obu uprawnień jednocześnie.

Czy Location Permission jest potrzebne do skanerów BLE?

Na Android do skanowania urządzeń BLE wymagane jest ACCESS_FINE_LOCATION lub ACCESS_COARSE_LOCATION, ponieważ sygnały BLE mogą być wykorzystywane do triangulacji położenia. Na iOS do BLE wystarczy uprawnienie Bluetooth, Location Permission nie jest wymagane.

Podsumowanie

  • Location Permission — kluczowy mechanizm ochrony prywatności regulujący dostęp aplikacji do geopozycji urządzenia.
  • Poziomy dostępu obejmują podczas użytkowania (When In Use) i w tle (Always) na iOS, a także dokładny (ACCESS_FINE_LOCATION) i przybliżony (ACCESS_COARSE_LOCATION) na Android.
  • Android wymaga deklaracji uprawnień w manifeście i żądania w czasie wykonywania przez Activity Result API począwszy od API 23.
  • iOS wymaga dodania kluczy w Info.plist i wywołania metod CLLocationManager z obowiązkowym wskazaniem powodu w tekście żądania.
  • Contextual request — najlepsza praktyka, w której okno pojawia się w momencie potrzeby, a nie przy uruchomieniu aplikacji.
  • Pre-permission screen zwiększa konwersję zgody o 25-35% według danych Appsflyer (2024).
  • Odmowa użytkownika wymaga graceful degradation — alternatywnego scenariusza bez użycia geolokalizacji.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również