Location Permission είναι η άδεια που ζητά μια εφαρμογή για κινητά από τον χρήστη για πρόσβαση σε δεδομένα σχετικά με τη γεωγραφική του θέση. Χωρίς αυτή την άδεια, η εφαρμογή δεν μπορεί να προσδιορίσει τις συντεταγμένες της συσκευής και επομένως δεν μπορεί να παρέχει λειτουργίες γεωτοποθεσίας. Σύμφωνα με το Apple Developer Documentation, 2024, όλες οι εφαρμογές που χρησιμοποιούν υπηρεσίες τοποθεσίας υποχρεούνται να ζητούν ρητή συγκατάθεση του χρήστη μέσω συστήματος διαλόγου.
Κύρια σημεία
Location Permission είναι ένας μηχανισμός του λειτουργικού συστήματος που ρυθμίζει την πρόσβαση των εφαρμογών σε δεδομένα σχετικά με τη γεωγραφική θέση της συσκευής. Χωρίς ρητή συγκατάθεση του χρήστη, η εφαρμογή δεν μπορεί να λάβει συντεταγμένες GPS, δεδομένα δικτύων Wi-Fi ή πληροφορίες για κεραίες κινητής τηλεφωνίας.
Οι πλατφόρμες για κινητά Android και iOS υλοποιούν το δικό τους σύστημα αδειών, αλλά η γενική λογική είναι η ίδια: η εφαρμογή δηλώνει τις απαιτούμενες άδειες στο manifest ή στο αρχείο ρυθμίσεων και στη συνέχεια τις ζητά κατά τον χρόνο εκτέλεσης. Σύμφωνα με το 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, αν και η γενική ιδέα είναι η ίδια: όσο πιο ακριβής είναι η πρόσβαση, τόσο αυστηρότερες απαιτήσεις θέτει η πλατφόρμα στην εφαρμογή.
| Επίπεδο πρόσβασης | Android | iOS |
|---|---|---|
| Κατά τη χρήση | Μόνο όταν η εφαρμογή είναι ενεργή | When In Use — μόνο στην εφαρμογή |
| Παρασκήνιο | Always — συνεχώς, ακόμη και στο παρασκήνιο | Always — απαιτεί πρόσθετο έλεγχο App Store |
| Κατά προσέγγιση | ACCESS_COARSE_LOCATION (ακρίβεια έως 500 μ.) | Με επιλογή Precision = Off (iOS 14+) |
ACCESS_FINE_LOCATION παρέχει πρόσβαση σε ακριβείς συντεταγμένες GPS με σφάλμα λίγων μέτρων. Για τη δήλωση αυτής της άδειας στο manifest χρησιμοποιείται η σταθερά android.permission.ACCESS_FINE_LOCATION. ACCESS_COARSE_LOCATION παρέχει κατά προσέγγιση τοποθεσία με ακρίβεια έως 500 μέτρα βάσει δεδομένων Wi-Fi και κεραιών κινητής τηλεφωνίας.
When In Use (κατά τη χρήση) επιτρέπει στην εφαρμογή να λαμβάνει συντεταγμένες μόνο όταν είναι ανοιχτή στην οθόνη. Always (πάντα) παρέχει πρόσβαση στη γεωτοποθεσία ακόμη και σε λειτουργία παρασκηνίου, αλλά απαιτεί υποχρεωτική αναθεώρηση στο App Store. Από το iOS 14, ο χρήστης μπορεί να απενεργοποιήσει ξεχωριστά τον ακριβή εντοπισμό για κάθε εφαρμογή μέσω του διακόπτη Precision.
Αίτημα Location Permission στο Android πραγματοποιείται σε δύο στάδια: δήλωση αδειών στο manifest και αίτημα κατά τον χρόνο εκτέλεσης στον κώδικα. Από το Android 6.0 (API 23), όλες οι επικίνδυνες άδειες ζητούνται κατά τη λειτουργία της εφαρμογής, όχι κατά την εγκατάσταση.
Το πρώτο βήμα είναι η προσθήκη των απαιτούμενων αδειών στο αρχείο AndroidManifest.xml. Για ακριβή και κατά προσέγγιση εντοπισμό χρησιμοποιούνται διαφορετικές σταθερές.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Μετά τη δήλωση στο manifest, πρέπει να κληθεί το σύστημα διαλόγου αιτήματος άδειας στον κώδικα της εφαρμογής. Ας δούμε ένα παράδειγμα σε Kotlin χρησιμοποιώντας το Activity Result API.
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, ο χρήστης πρέπει να ανακατευθυνθεί στις ρυθμίσεις συστήματος.
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 απαιτεί την προσθήκη ειδικών κλειδιών στο αρχείο Info.plist και την κλήση της μεθόδου της κλάσης CLLocationManager. Η Apple δίνει ιδιαίτερη προσοχή στην ιδιωτικότητα, γι' αυτό το κείμενο εξήγησης στο παράθυρο διαλόγου πρέπει να είναι όσο το δυνατόν πιο συγκεκριμένο.
Για να ζητηθεί τοποθεσία στο iOS, πρέπει να προστεθεί ένα ή και τα δύο κλειδιά στο Info.plist: NSLocationWhenInUseUsageDescription για πρόσβαση κατά τη χρήση και NSLocationAlwaysAndWhenInUseUsageDescription για πρόσβαση στο παρασκήνιο. Η τιμή κάθε κλειδιού είναι μια συμβολοσειρά που θα εμφανιστεί στον χρήστη στο παράθυρο διαλόγου.
<key>NSLocationWhenInUseUsageDescription</key>
<string>Η εφαρμογή χρειάζεται την τοποθεσία σας για να εμφανίσει τα κοντινότερα σημεία στον χάρτη.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Η εφαρμογή χρειάζεται πρόσβαση στη γεωτοποθεσία στο παρασκήνιο για παρακολούθηση διαδρομής.</string>
Στον κώδικα Swift, το αίτημα πραγματοποιείται μέσω ενός στιγμιοτύπου του CLLocationManager. Ανάλογα με το απαιτούμενο επίπεδο πρόσβασης, καλείται η requestWhenInUseAuthorization ή η 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
}
}
}
Σε αντίθεση με το Android, το iOS δεν παρέχει στον προγραμματιστή μέθοδο για έλεγχο shouldShowRequestPermissionRationale. Το σύστημα αποφασίζει μόνο του πότε θα εμφανίσει την εξήγηση. Επιπλέον, στο iOS ο χρήστης μπορεί να αλλάξει την άδεια μόνο μέσω των ρυθμίσεων συστήματος — η εφαρμογή δεν μπορεί να καλέσει ξανά το σύστημα διαλόγου αφού ο χρήστης έχει κάνει την επιλογή του. Το RequestAlwaysAuthorization ζητά πρώτα When In Use και στη συνέχεια, μετά τη λήψη της πρώτης συγκατάθεσης, ένα ξεχωριστό παράθυρο διαλόγου για πρόσβαση στο παρασκήνιο.
Βέλτιστες πρακτικές εργασίας με Location Permission βοηθούν στη μείωση των αρνήσεων χρηστών και στην ικανοποίηση των απαιτήσεων των καταστημάτων εφαρμογών. Η Google και η Apple έχουν δημοσιεύσει συστάσεις, η τήρηση των οποίων αυξάνει την πιθανότητα έγκρισης της εφαρμογής.
Μην εμφανίζετε το παράθυρο διαλόγου αιτήματος Location Permission αμέσως κατά την εκκίνηση της εφαρμογής. Ένας χρήστης που μόλις άνοιξε την εφαρμογή δεν καταλαβαίνει ακόμα γιατί πρέπει να παρέχει πρόσβαση στη γεωτοποθεσία. Contextual request σημαίνει ότι το παράθυρο διαλόγου εμφανίζεται τη στιγμή που ο χρήστης χρειάζεται πραγματικά τη λειτουργία που απαιτεί άδεια. Για παράδειγμα, όταν πατάει το κουμπί “Αναζήτηση κοντινότερου καταστήματος”.
Πριν από το σύστημα διαλόγου, εμφανίστε τη δική σας οθόνη εξήγησης (pre-permission screen). Σε αυτήν, εξηγήστε γιατί η εφαρμογή χρειάζεται γεωτοποθεσία, ποια δεδομένα συλλέγονται και πώς θα χρησιμοποιηθούν. Αφού ο χρήστης κάνει κλικ στο “Επιτρέπεται” στην οθόνη σας, εμφανίστε το σύστημα διαλόγου. Σύμφωνα με δεδομένα της Appsflyer (2024), αυτή η προσέγγιση αυξάνει τη μετατροπή συγκατάθεσης κατά 25-35%.
Η πρόσβαση στο παρασκήνιο στη γεωτοποθεσία είναι απαραίτητη μόνο για εφαρμογές που λειτουργούν στο παρασκήνιο: πλοηγούς, ιχνηλάτες δραστηριότητας, εφαρμογές παράδοσης. Εάν η εφαρμογή σας χρειάζεται συντεταγμένες μόνο όταν η οθόνη είναι ανοιχτή, ζητήστε When In Use. Το App Store θα απορρίψει την εφαρμογή εάν το Always δεν είναι λειτουργικά δικαιολογημένο. Στο Android, η πρόσβαση στο παρασκήνιο ρυθμίζεται επιπλέον μέσω της άδειας ACCESS_BACKGROUND_LOCATION.
Συχνές Ερωτήσεις
Η εφαρμογή πρέπει να χειριστεί σωστά την άρνηση και να προσφέρει ένα εναλλακτικό σενάριο. Για παράδειγμα, μη αυτόματη εισαγωγή διεύθυνσης ή προσδιορισμό πόλης βάσει διεύθυνσης IP. Το σύστημα διαλόγου δεν εμφανίζεται ξανά — ο χρήστης πρέπει να ανακατευθυνθεί στις ρυθμίσεις.
Τεχνικά ναι, το σύστημα διαλόγου μπορεί να κληθεί χωρίς προκαταρκτική οθόνη. Ωστόσο, η μετατροπή συγκατάθεσης χωρίς εξήγηση είναι 30-40%, ενώ με προκαταρκτική οθόνη είναι 60-75%. Η Apple και η Google συνιστούν πάντα να εξηγείτε τον λόγο του αιτήματος.
Χρησιμοποιήστε το ContextCompat.checkSelfPermission με τη σταθερά Manifest.permission.ACCESS_FINE_LOCATION. Η μέθοδος επιστρέφει PERMISSION_GRANTED ή PERMISSION_DENIED, που επιτρέπει τον προσδιορισμό της τρέχουσας κατάστασης χωρίς κλήση του συστήματος διαλόγου.
ACCESS_FINE_LOCATION παρέχει πρόσβαση σε ακριβείς συντεταγμένες GPS με σφάλμα 3-10 μέτρων. ACCESS_COARSE_LOCATION παρέχει κατά προσέγγιση τοποθεσία με ακρίβεια έως 500 μέτρα βάσει Wi-Fi και κεραιών κινητής τηλεφωνίας. Στο Android 12+, ο προγραμματιστής μπορεί να ζητήσει και τις δύο άδειες ταυτόχρονα.
Στο Android, για τη σάρωση συσκευών BLE απαιτείται ACCESS_FINE_LOCATION ή ACCESS_COARSE_LOCATION, καθώς τα σήματα BLE μπορούν να χρησιμοποιηθούν για τριγωνισμό θέσης. Στο iOS για BLE, αρκεί η άδεια Bluetooth, δεν απαιτείται Location Permission.
Συμπέρασμα
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης