Location Permission ay ang pahintulot na hinihiling ng isang mobile application mula sa user upang ma-access ang data tungkol sa kanyang heograpikal na lokasyon. Kung wala ang pahintulot na ito, hindi matutukoy ng application ang mga coordinate ng device, at samakatuwid ay hindi makapagbibigay ng mga function ng geolocation. Ayon sa Apple Developer Documentation, 2024, lahat ng application na gumagamit ng mga serbisyo ng lokasyon ay kinakailangang humingi ng malinaw na pahintulot ng user sa pamamagitan ng system dialog.
Mga Pangunahing Punto
Location Permission ay isang mekanismo ng operating system na kumokontrol sa access ng mga application sa data tungkol sa heograpikal na lokasyon ng device. Kung wala ang malinaw na pahintulot ng user, hindi makukuha ng application ang mga GPS coordinate, data ng Wi-Fi network, o impormasyon tungkol sa mga cell tower.
Ang mga mobile platform na Android at iOS ay nagpapatupad ng kanilang sariling sistema ng pahintulot, ngunit ang pangkalahatang lohika ay pareho: ang application ay nagdedeklara ng mga kinakailangang pahintulot sa manifest o configuration file, pagkatapos ay hinihingi ang mga ito sa runtime. Ayon sa Android Developers, 2024, simula sa Android 10 lahat ng pahintulot ng geolocation ay nabibilang sa mapanganib na kategorya at nangangailangan ng runtime request.
Ang dahilan ng ganitong approach ay ang proteksyon ng privacy ng mga user. Ang data ng lokasyon ay nagpapahintulot sa pagbuo ng mga ruta ng paglalakbay, pagtukoy ng mga lugar ng trabaho at pahinga, pati na rin ang pagkilala ng pagkatao. Samakatuwid, ang parehong platform ay nangangailangan ng transparent na paliwanag sa dialog ng paghiling: dapat sabihin ng application ang dahilan kung bakit kailangan nito ng access sa geolocation.
Pahintulot ng geolocation ay kinakailangan para sa anumang application na ang functionality ay nakadepende sa kaalaman ng pisikal na lokasyon ng user. Mga mapa at nabigasyon, mga application ng paghahatid, mga serbisyo ng panahon, mga social network na may geotagging — lahat ng kategoryang ito ng software ay nangangailangan ng Location Permission.
Kung wala ang pahintulot na ito, hindi matutukoy ng application ang mga coordinate ng device sa anumang available na paraan: hindi sa pamamagitan ng GPS module, hindi sa pamamagitan ng Wi-Fi scanning, hindi sa pamamagitan ng pagtukoy ng lokasyon batay sa mga cell tower. Maaaring bawiin ng user anumang oras ang pahintulot sa mga setting ng system, pagkatapos nito dapat na tamang hawakan ng application ang pagtanggi.
Ayon sa pananaliksik ng Pew Research Center (2024), humigit-kumulang 45% ng mga user ang bumabawi ng access sa geolocation sa mga application na hindi ito ginagamit para sa pangunahing functionality. Ito ay nangangahulugan na ang developer ay dapat malinaw na magbigay-katwiran sa paghiling at mag-alok ng mga alternatibong mekanismo para sa mga tumanggi sa Location Permission.
Ang GDPR sa Europa at batas 152-FZ sa Russia ay nangangailangan ng pagkuha ng informed consent para sa pagproseso ng data ng lokasyon. Ang application ay hindi lamang dapat humingi ng pahintulot sa pamamagitan ng system dialog, kundi magbigay din ng hiwalay na abiso tungkol sa mga layunin ng pangongolekta ng data. Ang paglabag sa mga kinakailangang ito ay nagreresulta sa mga multa hanggang 20 milyong euro o 4% ng taunang kita ng kumpanya.
Kung ang application ay hindi humihingi ng Location Permission o ang user ay tumanggi sa access, ang developer ay dapat magbigay ng backup scenario. Para sa isang mapping application, ito ay maaaring manual na pag-input ng address, para sa isang delivery application — pagpili mula sa listahan ng mga naka-save na address, para sa isang serbisyo ng panahon — pagtukoy ng lungsod batay sa IP address. Graceful degradation (maayos na pagbaba) ay isang standard practice na inirerekomenda ng Google at Apple.
Mga antas ng access sa geolocation ay nagkakaiba sa Android at iOS, bagaman ang pangkalahatang ideya ay pareho: kung mas tumpak ang access, mas mahigpit na mga kinakailangan ang ipinapataw ng platform sa application.
| Antas ng access | Android | iOS |
|---|---|---|
| Habang ginagamit | Kapag aktibo lang ang application | When In Use — sa application lang |
| Background | Always — palagi, kahit sa background | Always — nangangailangan ng karagdagang pagsusuri ng App Store |
| Tinatayang | ACCESS_COARSE_LOCATION (katumpakan hanggang 500 m) | Gamit ang opsyong Precision = Off (iOS 14+) |
ACCESS_FINE_LOCATION ay nagbibigay ng access sa tumpak na GPS coordinates na may error na ilang metro. Para sa pagdedeklara ng pahintulot na ito sa manifest, ginagamit ang constant na android.permission.ACCESS_FINE_LOCATION. ACCESS_COARSE_LOCATION naman ay nagbibigay ng tinatayang lokasyon na may katumpakan hanggang 500 metro batay sa Wi-Fi at mga cell tower.
When In Use (habang ginagamit) ay nagpapahintulot sa application na makakuha ng coordinates lamang kapag ito ay nakabukas sa screen. Always (palagi) ay nagbibigay ng access sa geolocation kahit sa background mode, ngunit nangangailangan ng mandatoryong pagsusuri sa App Store. Simula sa iOS 14, maaaring hiwalay na patayin ng user ang tumpak na positioning para sa bawat application sa pamamagitan ng switch na Precision.
Paghiling ng Location Permission sa Android ay ginagawa sa dalawang yugto: deklarasyon ng mga pahintulot sa manifest at runtime request sa code. Simula sa Android 6.0 (API 23), lahat ng mapanganib na pahintulot ay hinihiling habang tumatakbo ang application, hindi sa pag-install.
Ang unang hakbang ay idagdag ang mga kinakailangang pahintulot sa file na AndroidManifest.xml. Para sa tumpak at tinatayang positioning, ginagamit ang iba't ibang constant.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Pagkatapos ng deklarasyon sa manifest, dapat tawagan ang system dialog ng paghiling ng pahintulot sa code ng application. Tingnan natin ang isang halimbawa sa Kotlin gamit ang Activity Result API.
private val locationPermissionRequest =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
when {
permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
// Nakuha ang pahintulot
getLocation()
}
permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
// Tinatayang lokasyon lamang
getCoarseLocation()
}
else -> {
// Tumanggi ang user
showLocationExplanation()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
checkLocationPermission()
}
Kung ang user ay tumanggi sa access, ang Android system ay hindi pinapayagan na awtomatikong muling ipakita ang dialog. Dapat tawagan ng developer ang shouldShowRequestPermissionRationale para magpakita ng paunang paliwanag. Sa paulit-ulit na pagtanggi gamit ang flag na Never Ask Again, dapat i-redirect ang user sa mga setting ng system.
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()
}
}
}
Paghiling ng Location Permission sa iOS ay nangangailangan ng pagdaragdag ng mga espesyal na key sa file na Info.plist at pagtawag sa pamamaraan ng klase na CLLocationManager. Ang Apple ay nagbibigay ng espesyal na atensyon sa privacy, kaya ang teksto ng paliwanag sa dialog ng paghiling ay dapat na tiyak hangga't maaari.
Para humiling ng lokasyon sa iOS, kailangan magdagdag ng isa o parehong key sa Info.plist: NSLocationWhenInUseUsageDescription para sa access habang ginagamit at NSLocationAlwaysAndWhenInUseUsageDescription para sa background access. Ang halaga ng bawat key ay isang string na ipapakita sa user sa dialog.
<key>NSLocationWhenInUseUsageDescription</key>
<string>Kailangan ng application ang iyong lokasyon upang ipakita ang mga pinakamalapit na punto sa mapa.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Kailangan ng application ng access sa geolocation sa background upang subaybayan ang ruta.</string>
Sa Swift code, ang paghiling ay ginagawa sa pamamagitan ng isang instance ng CLLocationManager. Depende sa kinakailangang antas ng access, tinatawag ang requestWhenInUseAuthorization o 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
}
}
}
Hindi tulad ng Android, ang iOS ay hindi nagbibigay sa developer ng paraan upang suriin ang shouldShowRequestPermissionRationale. Ang system mismo ang nagpapasya kung kailan ipapakita ang paliwanag. Bukod dito, sa iOS ang user ay maaari lamang magbago ng pahintulot sa pamamagitan ng mga setting ng system — hindi maaaring tawagan muli ng application ang system dialog pagkatapos gumawa ng pagpili ang user. RequestAlwaysAuthorization ay unang humihingi ng When In Use, pagkatapos, pagkatapos makuha ang unang pahintulot, isang hiwalay na dialog para sa background access.
Mga pinakamahusay na kasanayan sa pagtatrabaho sa Location Permission ay tumutulong na bawasan ang mga pagtanggi ng user at matugunan ang mga kinakailangan ng mga app store. Ang Google at Apple ay nag-publish ng mga rekomendasyon na ang pagsunod ay nagpapataas ng posibilidad ng pag-apruba ng application.
Huwag ipakita ang dialog ng paghiling ng Location Permission kaagad sa paglunsad ng application. Ang user na kakabukas pa lang ng application ay hindi pa nauunawaan kung bakit kailangan niyang magbigay ng access sa geolocation. Contextual request ay nangangahulugan na ang dialog ay lilitaw sa sandaling ang user ay talagang nangangailangan ng function na nangangailangan ng pahintulot. Halimbawa, kapag pinindot ang button na “Hanapin ang pinakamalapit na tindahan”.
Bago ang system dialog, ipakita ang iyong sariling screen ng paliwanag (pre-permission screen). Dito, sabihin kung bakit kailangan ng application ang geolocation, anong data ang kinokolekta at kung paano ito gagamitin. Pagkatapos mag-click ang user ng “Pahintulutan” sa iyong screen, ipakita ang system dialog. Ayon sa data ng Appsflyer (2024), ang approach na ito ay nagpapataas ng conversion ng pahintulot ng 25-35%.
Ang background access sa geolocation ay kailangan lamang para sa mga application na gumagana sa background: navigator, activity tracker, delivery application. Kung ang iyong application ay nangangailangan lamang ng coordinates kapag ang screen ay bukas, humingi ng When In Use. Tatanggihan ng App Store ang application kung ang Always ay hindi functional na makatwiran. Sa Android, ang background access ay karagdagang kinokontrol sa pamamagitan ng pahintulot na ACCESS_BACKGROUND_LOCATION.
Mga Madalas Itanong
Dapat tamang hawakan ng application ang pagtanggi at mag-alok ng alternatibong scenario. Halimbawa, manual na pag-input ng address o pagtukoy ng lungsod batay sa IP address. Ang system dialog ay hindi muling ipinapakita — dapat i-redirect ang user sa mga setting.
Sa teknikal na paraan oo, ang system dialog ay maaaring tawagan nang walang paunang screen. Gayunpaman, ang conversion ng pahintulot nang walang paliwanag ay 30-40%, habang may paunang screen ito ay 60-75%. Inirerekomenda ng Apple at Google na laging ipaliwanag ang dahilan ng paghiling.
Gamitin ang ContextCompat.checkSelfPermission gamit ang constant na Manifest.permission.ACCESS_FINE_LOCATION. Ang pamamaraan ay nagbabalik ng PERMISSION_GRANTED o PERMISSION_DENIED, na nagpapahintulot sa pagtukoy ng kasalukuyang status nang hindi tinatawag ang system dialog.
ACCESS_FINE_LOCATION ay nagbibigay ng access sa tumpak na GPS coordinates na may error na 3-10 metro. ACCESS_COARSE_LOCATION ay nagbibigay ng tinatayang lokasyon na may katumpakan hanggang 500 metro batay sa Wi-Fi at mga cell tower. Sa Android 12+, ang developer ay maaaring humingi ng parehong pahintulot nang sabay-sabay.
Sa Android, para sa pag-scan ng mga BLE device ay kinakailangan ang ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION, dahil ang mga signal ng BLE ay maaaring gamitin para sa triangulation ng posisyon. Sa iOS para sa BLE, sapat na ang Bluetooth pahintulot, hindi kailangan ang Location Permission.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din