Location Permission az az engedély, amelyet a mobilalkalmazás a felhasználótól kér a földrajzi helyzetére vonatkozó adatok eléréséhez. Ezen engedély nélkül az alkalmazás nem tudja meghatározni az eszköz koordinátáit, így nem tud geolokációs funkciókat biztosítani. A Apple Developer Documentation, 2024 szerint minden, helymeghatározási szolgáltatásokat használó alkalmazás köteles kifejezett felhasználói hozzájárulást kérni egy rendszerpárbeszédablakon keresztül.
Főbb pontok
Location Permission az operációs rendszer egy olyan mechanizmusa, amely szabályozza az alkalmazások hozzáférését az eszköz földrajzi helyzetére vonatkozó adatokhoz. A felhasználó kifejezett hozzájárulása nélkül az alkalmazás nem szerezheti meg a GPS-koordinátákat, a Wi-Fi hálózatok adatait vagy a mobil bázisállomásokkal kapcsolatos információkat.
Az Android és iOS mobilplatformok saját engedélyrendszert implementálnak, de az általános logika ugyanaz: az alkalmazás deklarálja a szükséges engedélyeket a manifestben vagy konfigurációs fájlban, majd futásidőben kéri azokat. A Android Developers, 2024 szerint az Android 10-től kezdve az összes geolokációs engedély a veszélyes kategóriába tartozik, és futásidőbeni kérést igényel.
Ennek a megközelítésnek az oka a felhasználók magánéletének védelme. A helyadatok lehetővé teszik a mozgási útvonalak felépítését, a munka- és pihenőhelyek meghatározását, valamint a személyazonosítást. Ezért mindkét platform átlátható magyarázatot követel meg a kérési párbeszédablakban: az alkalmazásnak meg kell jelölnie az okot, amiért hozzáférésre van szüksége a geolokációhoz.
Geolokációs engedélyre szükség van minden olyan alkalmazásnál, amelynek funkcionalitása függ a felhasználó fizikai helyzetének ismeretétől. Térképek és navigáció, szállítási alkalmazások, időjárás-szolgáltatások, geocímkézést használó közösségi hálózatok — a szoftverek ezen kategóriái mind Location Permission-t igényelnek.
Ezen engedély nélkül az alkalmazás a rendelkezésre álló módszerek egyikével sem tudja meghatározni az eszköz koordinátáit: sem GPS-modulon keresztül, sem Wi-Fi szkenneléssel, sem mobil bázisállomások alapján történő helymeghatározással. A felhasználó bármikor visszavonhatja az engedélyt a rendszerbeállításokban, ezután az alkalmazásnak megfelelően kell kezelnie az elutasítást.
A Pew Research Center (2024) kutatása szerint a felhasználók körülbelül 45%-a visszavonja a geolokációhoz való hozzáférést azokban az alkalmazásokban, amelyek nem használják azt az alapvető funkciókhoz. Ez azt jelenti, hogy a fejlesztőnek egyértelműen meg kell indokolnia a kérést, és alternatív mechanizmusokat kell felajánlania azok számára, akik megtagadták a Location Permission-t.
Az európai GDPR és az orosz 152-FZ törvény tájékozott hozzájárulás megszerzését írja elő a helyadatok feldolgozásához. Az alkalmazásnak nemcsak a rendszerpárbeszédablakon keresztül kell engedélyt kérnie, hanem külön értesítést is kell adnia az adatgyűjtés céljairól. E követelmények megsértése akár 20 millió eurós vagy a vállalat éves forgalmának 4%-át kitevő bírságot von maga után.
Ha az alkalmazás nem kér Location Permission-t, vagy a felhasználó megtagadja a hozzáférést, a fejlesztőnek tartalék forgatókönyvet kell biztosítania. Térképes alkalmazás esetén ez lehet a cím kézi megadása, szállítási alkalmazás esetén a mentett címek listájából történő választás, időjárás-szolgáltatás esetén a város meghatározása IP-cím alapján. Graceful degradation (zökkenőmentes degradáció) a Google és az Apple által ajánlott szokásos gyakorlat.
Geolokáció hozzáférési szintjei eltérnek Androidon és iOS-en, bár az általános elképzelés ugyanaz: minél pontosabb a hozzáférés, annál szigorúbb követelményeket támaszt a platform az alkalmazással szemben.
| Hozzáférési szint | Android | iOS |
|---|---|---|
| Használat közben | Csak amikor az alkalmazás aktív | When In Use — csak az alkalmazásban |
| Háttérben | Always — folyamatosan, még a háttérben is | Always — további App Store-ellenőrzést igényel |
| Hozzávetőleges | ACCESS_COARSE_LOCATION (500 m-es pontosság) | Precision = Off opcióval (iOS 14+) |
ACCESS_FINE_LOCATION hozzáférést biztosít a pontos GPS-koordinátákhoz néhány méteres hibahatárral. Az engedély manifestben történő deklarálásához az android.permission.ACCESS_FINE_LOCATION konstans használható. ACCESS_COARSE_LOCATION pedig hozzávetőleges helymeghatározást biztosít 500 méteres pontossággal Wi-Fi és mobil bázisállomások adatai alapján.
When In Use (használat közben) lehetővé teszi az alkalmazás számára, hogy koordinátákat csak akkor szerezzen be, amikor az a képernyőn van megnyitva. Always (mindig) hozzáférést biztosít a geolokációhoz még háttérmódban is, de kötelező App Store-felülvizsgálatot igényel. Az iOS 14-től kezdve a felhasználó a Precision kapcsolóval külön-külön kikapcsolhatja a pontos pozicionálást minden alkalmazásnál.
Location Permission kérése Androidon két szakaszban történik: az engedélyek deklarálása a manifestben és futásidőbeni kérés a kódban. Az Android 6.0-tól (API 23) kezdve az összes veszélyes engedélyt az alkalmazás futása során kérik, nem a telepítéskor.
Az első lépés a szükséges engedélyek hozzáadása az AndroidManifest.xml fájlhoz. A pontos és hozzávetőleges pozicionáláshoz különböző konstansok használatosak.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
A manifestben történő deklarálás után meg kell hívni az engedélykérés rendszerpárbeszédablakát az alkalmazás kódjában. Nézzünk egy példát Kotlinban az Activity Result API használatával.
private val locationPermissionRequest =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
when {
permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
// Engedély megadva
getLocation()
}
permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
// Csak hozzávetőleges helymeghatározás
getCoarseLocation()
}
else -> {
// A felhasználó megtagadta
showLocationExplanation()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
checkLocationPermission()
}
Ha a felhasználó megtagadta a hozzáférést, az Android rendszer nem engedi a párbeszédablak automatikus újbóli megjelenítését. A fejlesztőnek a shouldShowRequestPermissionRationale függvényt kell meghívnia az előzetes magyarázat megjelenítéséhez. Ismételt elutasítás esetén a Never Ask Again jelzővel a felhasználót a rendszerbeállításokhoz kell irányítani.
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 kérése iOS-en speciális kulcsok hozzáadását igényli az Info.plist fájlhoz és a CLLocationManager osztály metódusának meghívását. Az Apple kiemelt figyelmet fordít a magánéletre, ezért a kérési párbeszédablakban szereplő magyarázó szövegnek a lehető legkonkrétabbnak kell lennie.
Helymeghatározás kéréséhez iOS-en egy vagy mindkét kulcsot hozzá kell adni az Info.plist fájlhoz: NSLocationWhenInUseUsageDescription a használat közbeni hozzáféréshez és NSLocationAlwaysAndWhenInUseUsageDescription a háttérhozzáféréshez. Az egyes kulcsok értéke egy karaktersorozat, amely a párbeszédablakban jelenik meg a felhasználónak.
<key>NSLocationWhenInUseUsageDescription</key>
<string>Az alkalmazásnak szüksége van az Ön helyzetére a legközelebbi pontok térképen való megjelenítéséhez.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Az alkalmazásnak szüksége van geolokációs hozzáférésre a háttérben az útvonal követéséhez.</string>
Swift kódban a kérés egy CLLocationManager példányon keresztül történik. A szükséges hozzáférési szinttől függően a requestWhenInUseAuthorization vagy a requestAlwaysAuthorization metódus hívódik meg.
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
}
}
}
Az Androiddal ellentétben az iOS nem biztosít a fejlesztő számára metódust a shouldShowRequestPermissionRationale ellenőrzéséhez. A rendszer maga dönti el, hogy mikor jeleníti meg a magyarázatot. Továbbá iOS-en a felhasználó csak a rendszerbeállításokon keresztül változtathatja meg az engedélyt — az alkalmazás nem hívhatja meg újra a rendszerpárbeszédablakot, miután a felhasználó választott. A RequestAlwaysAuthorization először When In Use-t kér, majd az első hozzájárulás megszerzése után egy külön párbeszédablakot a háttérhozzáféréshez.
Legjobb gyakorlatok a Location Permission használatához segítenek csökkenteni a felhasználói elutasításokat és megfelelni az alkalmazásboltok követelményeinek. A Google és az Apple közzétett ajánlásokat, amelyek betartása növeli az alkalmazás jóváhagyásának valószínűségét.
Ne jelenítse meg a Location Permission kérési párbeszédablakot közvetlenül az alkalmazás indításakor. Az a felhasználó, aki éppen megnyitotta az alkalmazást, még nem érti, miért kell hozzáférést biztosítania a geolokációhoz. Contextual request azt jelenti, hogy a párbeszédablak akkor jelenik meg, amikor a felhasználónak valóban szüksége van az engedélyt igénylő funkcióra. Például a “Legközelebbi bolt keresése” gomb megnyomásakor.
A rendszerpárbeszédablak előtt jelenítse meg saját magyarázó képernyőjét (pre-permission screen). Ezen mondja el, miért van szüksége az alkalmazásnak geolokációra, milyen adatokat gyűjt és azokat hogyan használja fel. Miután a felhasználó rákattint az “Engedélyezés” gombra az Ön képernyőjén, jelenítse meg a rendszerpárbeszédablakot. A Appsflyer (2024) adatai szerint ez a megközelítés 25-35%-kal növeli a hozzájárulás konverzióját.
A geolokáció háttérhozzáférése csak a háttérben működő alkalmazások számára szükséges: navigátorok, aktivitáskövetők, szállítási alkalmazások. Ha az Ön alkalmazásának csak akkor van szüksége koordinátákra, amikor a képernyő nyitva van, kérjen When In Use-t. Az App Store elutasítja az alkalmazást, ha az Always funkcionálisan nem indokolt. Androidon a háttérhozzáférést emellett az ACCESS_BACKGROUND_LOCATION engedély szabályozza.
Gyakran Ismételt Kérdések
Az alkalmazásnak megfelelően kell kezelnie az elutasítást és alternatív forgatókönyvet kell felajánlania. Például a cím kézi megadását vagy a város meghatározását IP-cím alapján. A rendszerpárbeszédablak nem jelenik meg újra — a felhasználót a beállításokhoz kell irányítani.
Technikailag igen, a rendszerpárbeszédablak előzetes képernyő nélkül is meghívható. Azonban a hozzájárulás konverziója magyarázat nélkül 30-40%, míg előzetes képernyővel 60-75%. Az Apple és a Google azt javasolja, hogy mindig magyarázzák el a kérés okát.
Használja a ContextCompat.checkSelfPermission metódust a Manifest.permission.ACCESS_FINE_LOCATION konstanssal. A metódus PERMISSION_GRANTED vagy PERMISSION_DENIED értéket ad vissza, ami lehetővé teszi az aktuális állapot meghatározását a rendszerpárbeszédablak meghívása nélkül.
ACCESS_FINE_LOCATION hozzáférést biztosít a pontos GPS-koordinátákhoz 3-10 méteres hibahatárral. ACCESS_COARSE_LOCATION hozzávetőleges helymeghatározást biztosít 500 méteres pontossággal Wi-Fi és mobil bázisállomások alapján. Android 12+ rendszeren a fejlesztő mindkét engedélyt egyszerre kérheti.
Androidon a BLE-eszközök szkenneléséhez ACCESS_FINE_LOCATION vagy ACCESS_COARSE_LOCATION szükséges, mivel a BLE-jelek használhatók a pozíció triangulációjához. iOS-en a BLE-hez elegendő a Bluetooth-engedély, Location Permission nem szükséges.
Összegzés
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is