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-FZ в Русия изискват получаване на информирано съгласие за обработка на данни за местоположение. Приложението трябва не само да поиска разрешение чрез системния диалог, но и да предостави отделно уведомление за целите на събирането на данни. Нарушаването на тези изисквания води до глоби до 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 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също