Location Permission у мобилном развоју: шта је то, нивои приступа и принцип рада

Аутор: IT Sectr Објављено: 2026-05-21 Време читања: 8 мин

Location Permission је дозвола коју мобилна апликација тражи од корисника за приступ подацима о његовој географској локацији. Без ове дозволе апликација не може да одређује координате уређаја, а самим тим не може да пружа функције геолокације. Према Apple Developer Documentation, 2024, све апликације које користе услуге геолокације обавезне су да затраже изричиту сагласност корисника кроз системски дијалог.

Главно

  • Location Permission — обавезна дозвола за приступ геопозицији уређаја у мобилним апликацијама.
  • Нивои приступа се деле на приступ у позадини и приликом коришћења апликације на обе платформе.
  • Android користи ACCESS_FINE_LOCATION и ACCESS_COARSE_LOCATION за прецизно и приближно одређивање координата.
  • iOS захтева додавање кључева NSLocationWhenInUseUsageDescription и NSLocationAlwaysUsageDescription у Info.plist.
  • Захтев за дозволу треба да садржи разумљиво објашњење зашто је апликацији потребан приступ подацима о локацији.

Шта је Location Permission?

Location Permission је механизам оперативног система који регулише приступ апликација подацима о географској локацији уређаја. Без изричите сагласности корисника, апликација не може да добије GPS координате, податке о Wi-Fi мрежама или информације о мобилним базним станицама.

Мобилне платформе Android и iOS имплементирају сопствени систем дозвола, али је општа логика иста: апликација декларише потребне дозволе у манифесту или конфигурационом фајлу, затим их тражи у радном времену. Према Android Developers, 2024, од Android-а 10 све дозволе за геолокацију спадају у категорију опасних и захтевају захтев у радном времену.

Разлог оваквог приступа је заштита приватности корисника. Подаци о локацији омогућавају креирање рута кретања, одређивање места рада и одмора, као и идентификацију личности. Због тога обе платформе захтевају транспарентно објашњење у дијалогу захтева: апликација мора да наведе разлог због којег јој је потребан приступ геолокацији.

Зашто је потребна дозвола за геолокацију

Дозвола за геолокацију је неопходна за сваку апликацију чија функционалност зависи од познавања физичке локације корисника. Мапе и навигација, апликације за доставу, временске услуге, друштвене мреже са геоозначавањем — све ове категорије програма захтевају Location Permission.

Без ове дозволе апликација не може да одреди координате уређаја ни једним од доступних начина: ни преко GPS модула, ни преко Wi-Fi скенирања, ни преко одређивања локације на основу мобилних базних станица. Корисник може у било ком тренутку да опозове дозволу у системским подешавањима, након чега апликација мора правилно да обради одбијање.

Према истраживању Pew Research Center (2024), око 45% корисника опозива приступ геолокацији у апликацијама које је не користе за основни функционалност. То значи да програмер мора јасно да образложи захтев и понуди алтернативне механизме за оне који су одбили Location Permission.

Правни захтеви

GDPR у Европи и закон 152-ФЗ у Русији захтевају добијање информисане сагласности за обраду података о локацији. Апликација не само да мора да затражи дозволу кроз системски дијалог, већ и да пружи посебно обавештење о сврхама прикупљања података. Кршење ових захтева повлачи казне до 20 милиона евра или 4% годишњег промета компаније.

Последице недостатка дозволе

Ако апликација не тражи Location Permission или корисник одбије приступ, програмер мора да предвиди резервни сценарио. За мапирајућу апликацију то може бити ручни унос адресе, за апликацију за доставу — избор са листе сачуваних адреса, за временску услугу — одређивање града на основу IP адресе. Graceful degradation (блага деградација) је стандардна пракса коју препоручују Google и Apple.

Нивои приступа геолокацији

Нивои приступа геолокацији се разликују на Android-у и iOS-у, иако је општа идеја иста: што је приступ прецизнији, то платформа поставља строже захтеве апликацији.

Ниво приступаAndroidiOS
Приликом коришћењаСамо када је апликација активнаWhen In Use — само у апликацији
У позадиниAlways — стално, чак и у позадиниAlways — захтева додатну проверу App Store-а
ПриближанACCESS_COARSE_LOCATION (прецизност до 500 м)Са опцијом Precision = Off (iOS 14+)

ACCESS_FINE_LOCATION и ACCESS_COARSE_LOCATION на Android-у

ACCESS_FINE_LOCATION даје приступ прецизним GPS координатама са грешком до неколико метара. За декларисање ове дозволе у манифесту користи се константа android.permission.ACCESS_FINE_LOCATION. ACCESS_COARSE_LOCATION, заузврат, пружа приближну локацију са прецизношћу до 500 метара на основу Wi-Fi и мобилних базних станица.

When In Use и Always на iOS-у

When In Use (приликом коришћења) омогућава апликацији да добија координате само када је отворена на екрану. Always (увек) даје приступ геолокацији чак и у позадинском режиму, али захтева обавезну ревизију у App Store-у. Од iOS 14, корисник може посебно да искључи прецизно позиционирање за сваку апликацију преко прекидача Precision.

Захтев за Location Permission на Android-у

Захтев за Location Permission на Android-у се изводи у две фазе: декларисање дозвола у манифесту и захтев у радном времену у коду. Од Android 6.0 (API 23), све опасне дозволе се траже током рада апликације, а не приликом инсталације.

Декларисање у манифесту

Први корак је додавање потребних дозвола у датотеку AndroidManifest.xml. За прецизно и приближно позиционирање користе се различите константе.

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

Захтев у радном времену на Kotlin-у

Након декларисања у манифесту, потребно је позвати системски дијалог захтева за дозволу у коду апликације. Погледајмо пример на Kotlin-у коришћењем Activity Result API-ја.

kotlin
private val locationPermissionRequest =
    registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
    when {
        permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
            // Дозвола је добијена
            getLocation()
        }
        permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
            // Само приближна локација
            getCoarseLocation()
        }
        else -> {
            // Корисник је одбио
            showLocationExplanation()
        }
    }
}

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

Обрада одбијања и поновни захтев

Ако је корисник одбио приступ, систем Android не дозвољава поновно аутоматско приказивање дијалога. Програмер мора да позове shouldShowRequestPermissionRationale за приказ претходног објашњења. При поновном одбијању са заставицом Never Ask Again потребно је преусмерити корисника у системска подешавања.

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

Захтев за Location Permission на iOS-у

Захтев за Location Permission на iOS-у захтева додавање посебних кључева у датотеку Info.plist и позивање методе класе CLLocationManager. Apple посебну пажњу посвећује приватности, стога текст објашњења у дијалогу захтева мора бити што конкретнији.

Подешавање Info.plist-а

За захтев локације на iOS-у потребно је додати један или оба кључа у Info.plist: NSLocationWhenInUseUsageDescription за приступ приликом коришћења и NSLocationAlwaysAndWhenInUseUsageDescription за приступ у позадини. Вредност сваког кључа је низ знакова који ће бити приказан кориснику у дијалогу.

xml
<key>NSLocationWhenInUseUsageDescription</key>
<string>Апликацији је потребна ваша локација за приказ најближих тачака на мапи.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Апликацији је потребан приступ геолокацији у позадини за праћење руте.</string>

Захтев на Swift-у

У Swift коду, захтев се изводи преко инстанце CLLocationManager. У зависности од потребног нивоа приступа, позива се requestWhenInUseAuthorization или 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
        }
    }
}

Разлика између платформи

За разлику од Android-а, iOS не пружа програмеру метод за проверу shouldShowRequestPermissionRationale. Систем сам одлучује када да прикаже објашњење. Поред тога, на iOS-у корисник може да промени дозволу само кроз системска подешавања — апликација не може поново да позове системски дијалог након што је корисник направио избор. RequestAlwaysAuthorization прво тражи When In Use, а затим, након добијања прве сагласности, засебан дијалог за приступ у позадини.

Најбоље праксе рада са геолокацијом

Најбоље праксе рада са Location Permission-ом помажу да се смање одбијања корисника и испуне захтеви продавница апликација. Google и Apple су објавили препоруке чије поштовање повећава вероватноћу одобравања апликације.

Захтевајте дозволу у контексту

Не приказујте дијалог захтева за Location Permission одмах при покретању апликације. Корисник који је управо отворио апликацију још не разуме зашто треба да пружи приступ геолокацији. Contextual request подразумева да се дијалог појављује у тренутку када је кориснику заиста потребна функција која захтева дозволу. На пример, при притиску на дугме „Пронађи најближу продавницу”.

Објасните разлог унапред

Пре системског дијалога прикажите сопствени екран објашњења (pre-permission screen). На њему објасните зашто је апликацији потребна геолокација, који подаци се прикупљају и како ће бити коришћени. Након што корисник кликне „Дозволи” на вашем екрану, прикажите системски дијалог. Према подацима Appsflyer (2024), овај приступ повећава конверзију сагласности за 25-35%.

Не захтевајте Always без потребе

Позадински приступ геолокацији је потребан само апликацијама које раде у позадини: навигаторима, тракерима активности, апликацијама за доставу. Ако вашој апликацији требају координате само када је екран отворен, затражите When In Use. App Store ће одбити апликацију ако Always није функционално оправдано. На Android-у, позадински приступ се додатно регулише кроз дозволу ACCESS_BACKGROUND_LOCATION.

Често постављана питања

Шта се дешава ако корисник одбије Location Permission?

Апликација мора правилно да обради одбијање и понуди алтернативни сценарио. На пример, ручни унос адресе или одређивање града на основу IP адресе. Системски дијалог се поново не приказује — потребно је преусмерити корисника у подешавања.

Може ли се Location Permission затражити без објашњења?

Технички да, системски дијалог се може позвати без претходног екрана. Међутим, конверзија сагласности без објашњења износи 30-40%, док са претходним екраном износи 60-75%. Apple и Google препоручују увек објаснити разлог захтева.

Како проверити статус Location Permission на Android-у?

Користите ContextCompat.checkSelfPermission са константом Manifest.permission.ACCESS_FINE_LOCATION. Метода враћа PERMISSION_GRANTED или PERMISSION_DENIED, што омогућава одређивање тренутног статуса без позивања системског дијалога.

Која је разлика између ACCESS_FINE_LOCATION и ACCESS_COARSE_LOCATION?

ACCESS_FINE_LOCATION даје приступ прецизним GPS координатама са грешком од 3-10 метара. ACCESS_COARSE_LOCATION пружа приближну локацију са прецизношћу до 500 метара на основу Wi-Fi и мобилних базних станица. На Android 12+, програмер може да затражи обе дозволе истовремено.

Да ли је Location Permission потребан за BLE скенере?

На Android-у за скенирање BLE уређаја потребан је ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION, јер BLE сигнали могу да се користе за триангулацију положаја. На iOS-у за BLE је довољна Bluetooth дозвола, Location Permission није потребан.

Закључак

  • Location Permission — кључни механизам заштите приватности који регулише приступ апликација геопозицији уређаја.
  • Нивои приступа укључују приликом коришћења (When In Use) и у позадини (Always) на iOS-у, као и прецизан (ACCESS_FINE_LOCATION) и приближан (ACCESS_COARSE_LOCATION) на Android-у.
  • Android захтева декларисање дозвола у манифесту и захтев у радном времену кроз Activity Result API од API 23.
  • iOS захтева додавање кључева у Info.plist и позивање метода CLLocationManager са обавезним навођењем разлога у тексту захтева.
  • Contextual request — најбоља пракса, при којој се дијалог појављује у тренутку потребе, а не при покретању апликације.
  • Pre-permission screen повећава конверзију сагласности за 25-35% према подацима Appsflyer (2024).
  • Одбијање корисника захтева graceful degradation — алтернативни сценарио без коришћења геолокације.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође