Location Permission är det tillstånd som en mobilapplikation begär från användaren för att få åtkomst till data om hans eller hennes geografiska position. Utan detta tillstånd kan applikationen inte bestämma enhetens koordinater och kan därför inte tillhandahålla geolokaliseringstjänster. Enligt Apple Developer Documentation, 2024 är alla applikationer som använder platstjänster skyldiga att begära användarens uttryckliga samtycke via en systemdialog.
Huvudpunkter
Location Permission är en mekanism i operativsystemet som reglerar applikationers åtkomst till data om enhetens geografiska position. Utan användarens uttryckliga samtycke kan applikationen inte få GPS-koordinater, Wi-Fi-nätverksdata eller information om mobila basstationer.
Mobilplattformarna Android och iOS implementerar sina egna tillståndssystem, men den allmänna logiken är densamma: applikationen deklarerar nödvändiga tillstånd i manifestet eller konfigurationsfilen och begär dem sedan under körning. Enligt Android Developers, 2024 tillhör från och med Android 10 alla geolokaliseringsbehörigheter kategorin farliga och kräver begäran under körning.
Anledningen till detta tillvägagångssätt är skyddet av användarnas integritet. Platsdata gör det möjligt att skapa resvägar, bestämma arbets- och viloplatser samt identifiera personer. Därför kräver båda plattformarna transparent förklaring i begärandialogen: applikationen måste ange varför den behöver åtkomst till geolokalisering.
Geolokaliseringstillstånd är nödvändigt för alla applikationer vars funktionalitet beror på kunskap om användarens fysiska position. Kartor och navigering, leveransapplikationer, väderappar, sociala nätverk med geotaggning — alla dessa programkategorier kräver Location Permission.
Utan detta tillstånd kan applikationen inte bestämma enhetens koordinater på något tillgängligt sätt: varken via GPS-modulen, via Wi-Fi-skanning eller via positionsbestämning baserat på mobila basstationer. Användaren kan när som helst återkalla tillståndet i systeminställningarna, varefter applikationen måste hantera avslaget korrekt.
Enligt forskning från Pew Research Center (2024) återkallar cirka 45% av användarna åtkomst till geolokalisering i applikationer som inte använder den för grundläggande funktionalitet. Detta innebär att utvecklaren måste motivera begäran tydligt och erbjuda alternativa mekanismer för dem som har avböjt Location Permission.
GDPR i Europa och lag 152-FZ i Ryssland kräver att informerat samtycke inhämtas för behandling av platsdata. Applikationen måste inte bara begära tillstånd via systemdialogen utan också tillhandahålla ett separat meddelande om syftena med datainsamlingen. Brott mot dessa krav medför böter på upp till 20 miljoner euro eller 4% av företagets årliga omsättning.
Om applikationen inte begär Location Permission eller användaren nekar åtkomst måste utvecklaren tillhandahålla ett reservscenario. För en kartapplikation kan detta vara manuell inmatning av adress, för en leveransapplikation — val från en lista över sparade adresser, för en väderapplikation — bestämning av stad baserat på IP-adress. Graceful degradation (elegant försämring) är en standardpraxis som rekommenderas av Google och Apple.
Åtkomstnivåer till geolokalisering skiljer sig på Android och iOS, även om den allmänna idén är densamma: ju mer exakt åtkomst, desto strängare krav ställer plattformen på applikationen.
| Åtkomstnivå | Android | iOS |
|---|---|---|
| Vid användning | Endast när applikationen är aktiv | When In Use — endast i applikationen |
| Bakgrund | Always — kontinuerligt, även i bakgrunden | Always — kräver ytterligare App Store-granskning |
| Ungefärlig | ACCESS_COARSE_LOCATION (noggrannhet upp till 500 m) | Med alternativet Precision = Off (iOS 14+) |
ACCESS_FINE_LOCATION ger åtkomst till exakta GPS-koordinater med en felmarginal på några meter. För att deklarera detta tillstånd i manifestet används konstanten android.permission.ACCESS_FINE_LOCATION. ACCESS_COARSE_LOCATION tillhandahåller i sin tur en ungefärlig position med en noggrannhet på upp till 500 meter baserat på Wi-Fi och mobila basstationer.
When In Use (vid användning) tillåter applikationen att hämta koordinater endast när den är öppen på skärmen. Always (alltid) ger åtkomst till geolokalisering även i bakgrundsläge, men kräver obligatorisk granskning i App Store. Från och med iOS 14 kan användaren separat stänga av exakt positionering för varje applikation via omkopplaren Precision.
Begära Location Permission på Android utförs i två steg: deklaration av tillstånd i manifestet och begäran under körning i koden. Från och med Android 6.0 (API 23) begärs alla farliga tillstånd under applikationens drift, inte vid installation.
Det första steget är att lägga till nödvändiga tillstånd i filen AndroidManifest.xml. För exakt och ungefärlig positionering används olika konstanter.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Efter deklaration i manifestet måste systemdialogrutan för tillståndsbegäran anropas i applikationskoden. Låt oss titta på ett exempel i Kotlin med Activity Result API.
private val locationPermissionRequest =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
when {
permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
// Tillstånd beviljat
getLocation()
}
permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
// Endast ungefärlig plats
getCoarseLocation()
}
else -> {
// Användaren nekade
showLocationExplanation()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
checkLocationPermission()
}
Om användaren har nekat åtkomst tillåter inte Android-systemet att dialogrutan visas automatiskt igen. Utvecklaren måste anropa shouldShowRequestPermissionRationale för att visa en preliminär förklaring. Vid förnyat avslag med flaggan Never Ask Again ska användaren omdirigeras till systeminställningarna.
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()
}
}
}
Begära Location Permission på iOS kräver att särskilda nycklar läggs till i filen Info.plist och att metoden i klassen CLLocationManager anropas. Apple lägger särskild vikt vid integritet, därför måste förklaringstexten i begärandialogen vara så specifik som möjligt.
För att begära plats på iOS måste en eller båda nycklarna läggas till i Info.plist: NSLocationWhenInUseUsageDescription för åtkomst vid användning och NSLocationAlwaysAndWhenInUseUsageDescription för bakgrundsåtkomst. Värdet för varje nyckel är en sträng som visas för användaren i dialogrutan.
<key>NSLocationWhenInUseUsageDescription</key>
<string>Applikationen behöver din plats för att visa närmaste punkter på kartan.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Applikationen behöver åtkomst till geolokalisering i bakgrunden för att följa rutten.</string>
I Swift-kod utförs begäran via en instans av CLLocationManager. Beroende på önskad åtkomstnivå anropas requestWhenInUseAuthorization eller requestAlwaysAuthorization.
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
}
}
}
Till skillnad från Android tillhandahåller iOS inte utvecklaren någon metod för att kontrollera shouldShowRequestPermissionRationale. Systemet bestämmer själv när det ska visa förklaringen. Dessutom kan användaren på iOS endast ändra tillståndet via systeminställningarna — applikationen kan inte anropa systemdialogrutan igen efter att användaren har gjort ett val. RequestAlwaysAuthorization begär först When In Use och därefter, efter att första samtycket erhållits, en separat dialogruta för bakgrundsåtkomst.
Bästa praxis för arbete med Location Permission hjälper till att minska användarnas avslag och uppfylla kraven från appbutiker. Google och Apple har publicerat rekommendationer vars efterlevnad ökar sannolikheten för godkännande av applikationen.
Visa inte dialogrutan för begäran om Location Permission omedelbart vid applikationens start. En användare som precis har öppnat applikationen förstår ännu inte varför han eller hon ska ge åtkomst till geolokalisering. Contextual request innebär att dialogrutan visas i det ögonblick då användaren verkligen behöver funktionen som kräver tillståndet. Till exempel när man trycker på knappen “Hitta närmaste butik”.
Före systemdialogen, visa din egen förklaringsskärm (pre-permission screen). På den berätta varför applikationen behöver geolokalisering, vilka data som samlas in och hur de kommer att användas. När användaren klickar på “Tillåt” på din skärm, visa systemdialogen. Enligt uppgifter från Appsflyer (2024) ökar detta tillvägagångssätt konverteringen av samtycke med 25-35%.
Bakgrundsåtkomst till geolokalisering behövs endast för applikationer som arbetar i bakgrunden: navigatorer, aktivitetsspårare, leveransapplikationer. Om din applikation endast behöver koordinater när skärmen är öppen, begär When In Use. App Store kommer att avvisa applikationen om Always inte är funktionellt motiverat. På Android regleras bakgrundsåtkomst ytterligare genom tillståndet ACCESS_BACKGROUND_LOCATION.
Vanliga frågor
Applikationen måste hantera avslaget korrekt och erbjuda ett alternativt scenario. Till exempel manuell inmatning av adress eller bestämning av stad baserat på IP-adress. Systemdialogen visas inte igen — användaren måste omdirigeras till inställningarna.
Tekniskt sett ja, systemdialogen kan anropas utan föregående skärm. Dock är konverteringen av samtycke utan förklaring 30-40%, medan den med föregående skärm är 60-75%. Apple och Google rekommenderar att alltid förklara orsaken till begäran.
Använd ContextCompat.checkSelfPermission med konstanten Manifest.permission.ACCESS_FINE_LOCATION. Metoden returnerar PERMISSION_GRANTED eller PERMISSION_DENIED, vilket gör det möjligt att bestämma aktuell status utan att anropa systemdialogen.
ACCESS_FINE_LOCATION ger åtkomst till exakta GPS-koordinater med en felmarginal på 3-10 meter. ACCESS_COARSE_LOCATION tillhandahåller en ungefärlig position med en noggrannhet på upp till 500 meter baserat på Wi-Fi och mobila basstationer. På Android 12+ kan utvecklaren begära båda tillstånden samtidigt.
På Android krävs ACCESS_FINE_LOCATION eller ACCESS_COARSE_LOCATION för att skanna BLE-enheter, eftersom BLE-signaler kan användas för positionstriangulering. På iOS räcker Bluetooth-tillstånd för BLE, Location Permission krävs inte.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också