GPS και υπηρεσίες γεωτοποθεσίας σε εφαρμογές κινητών — είναι API για τον προσδιορισμό της φυσικής τοποθεσίας μιας συσκευής με χρήση δορυφόρων, Wi-Fi και κινητών δικτύων. Σύμφωνα με το Google Android Location Guide (2025), περισσότερο από το 60% των εφαρμογών κινητών χρησιμοποιούν δεδομένα τοποθεσίας για εξατομίκευση περιεχομένου. Ο Fused Location Provider στο Android συνδυάζει πολλαπλές πηγές για αύξηση της ακρίβειας και μείωση της κατανάλωσης ενέργειας.
Κύρια σημεία
GPS (Global Positioning System) — είναι ένα δορυφορικό σύστημα πλοήγησης που αποτελείται από 31 ενεργούς δορυφόρους σε τροχιά ύψους περίπου 20 200 km. Σε κινητές συσκευές, το τσιπ GPS λαμβάνει σήματα από δορυφόρους και υπολογίζει συντεταγμένες με βάση τον τριπλευρισμό — μέτρηση του χρόνου διάδοσης σήματος από πολλαπλούς δορυφόρους. Οι υπηρεσίες γεωτοποθεσίας σε κινητά λειτουργικά συστήματα προσθέτουν στο GPS δεδομένα από σημεία πρόσβασης Wi-Fi και κεραίες κινητής τηλεφωνίας για επιτάχυνση του καθορισμού συντεταγμένων (A-GPS) και βελτίωση της ακρίβειας σε εσωτερικούς χώρους. Σύμφωνα με δεδομένα του GPS.gov (2024), η ακρίβεια του πολιτικού GPS είναι 3-5 μέτρα σε καθαρό ουρανό και έως 15 μέτρα σε συνθήκες πυκνής δόμησης.
Οι σύγχρονες κινητές συσκευές υποστηρίζουν όχι μόνο το αμερικανικό σύστημα GPS, αλλά και άλλα παγκόσμια συστήματα πλοήγησης: το ρωσικό GLONASS (24 δορυφόροι), το ευρωπαϊκό Galileo (28 δορυφόροι) και το κινεζικό BeiDou. Η ταυτόχρονη υποστήριξη πολλαπλών συστημάτων αυξάνει την ακρίβεια και την ταχύτητα καθορισμού συντεταγμένων — η συσκευή μπορεί να χρησιμοποιήσει έως 40 δορυφόρους από διαφορετικά συστήματα για τον υπολογισμό θέσης. Σε iOS και Android, η επιλογή δορυφορικού συστήματος γίνεται αυτόματα σε επίπεδο τσιπ υλικού, ο προγραμματιστής δεν χρειάζεται να το διαχειριστεί.
Η διαδικασία καθορισμού τοποθεσίας σε μια κινητή συσκευή αποτελείται από διάφορα στάδια: συλλογή δεδομένων από πηγές (δορυφόροι, Wi-Fi, κινητά δίκτυα), φιλτράρισμα και διόρθωση σφαλμάτων, υπολογισμός συντεταγμένων και μεταφορά του αποτελέσματος στην εφαρμογή. Το λειτουργικό σύστημα διαχειρίζεται αυτή τη διαδικασία μέσω μιας ενιαίας υπηρεσίας γεωτοποθεσίας που βελτιστοποιεί την εργασία όλων των πηγών για εξοικονόμηση μπαταρίας. Παρακάτω περιγράφονται οι τρεις κύριες πηγές δεδομένων τοποθεσίας.
Δορυφορική πλοήγηση παρέχει μέγιστη ακρίβεια (3-5 μέτρα), αλλά απαιτεί άμεση ορατότητα του ουρανού. Σε εσωτερικούς χώρους ή σε πυκνή αστική δόμηση, το σήμα GPS μπορεί να εξασθενήσει ή να χαθεί εντελώς. Ο χρόνος πρώτου καθορισμού θέσης (TTFF) είναι 30-60 δευτερόλεπτα κατά την ψυχρή εκκίνηση και 5-10 δευτερόλεπτα κατά τη θερμή εκκίνηση. Το A-GPS (Assisted GPS) επιταχύνει την εκκίνηση με λήψη εφημερίδων δορυφόρων μέσω διαδικτύου αντί αναμονής δεδομένων από τους δορυφόρους.
Wi-Fi εντοπισμός χρησιμοποιεί βάση δεδομένων διευθύνσεων MAC σημείων πρόσβασης με γνωστές συντεταγμένες. Η ακρίβεια είναι 10-50 μέτρα εντός εμβέλειας Wi-Fi. Οι κεραίες κινητής τηλεφωνίας παρέχουν ακρίβεια από 100 μέτρα έως αρκετά χιλιόμετρα ανάλογα με την πυκνότητα των κεραιών. Ο συνδυασμός όλων των πηγών (Fused Location) επιτρέπει τη λήψη συντεταγμένων με λογική ακρίβεια με ελάχιστη κατανάλωση ενέργειας — ειδικά όταν το τσιπ GPS είναι απενεργοποιημένο ή το δορυφορικό σήμα δεν είναι διαθέσιμο.
Και στις δύο πλατφόρμες, οι υπηρεσίες γεωτοποθεσίας υλοποιούνται μέσω συστημικών API με διαφορετικό βαθμό αφαίρεσης. Το Android χρησιμοποιεί το FusedLocationProviderClient από το Google Play Services, το iOS — το CLLocationManager από το Core Location. Και τα δύο API επιτρέπουν την αίτηση εφάπαξ θέσης ή εγγραφή σε τακτικές ενημερώσεις. Παρακάτω υπάρχει ένα παράδειγμα λήψης συντεταγμένων σε Android με χρήση του Fused Location Provider σε Kotlin.
val fusedClient = LocationServices.getFusedLocationProviderClient(this)
val locationRequest = LocationRequest.Builder(
Priority.PRIORITY_HIGH_ACCURACY
)
.setIntervalMillis(5000)
.setMinUpdateIntervalMillis(2000)
.build()
val locationCallback = object : LocationCallback() {
override fun onLocationResult(result: LocationResult) {
result.lastLocation?.let { location ->
Log.d("Τοποθεσία", "Lat: ${location.latitude}, Lng: ${location.longitude}")
}
}
}
if (checkLocationPermission()) {
fusedClient.requestLocationUpdates(
locationRequest, locationCallback,
Looper.getMainLooper()
)
}
Στο παράδειγμα, το LocationRequest διαμορφώνεται με προτεραιότητα HIGH_ACCURACY — αυτό ενεργοποιεί το GPS για μέγιστη ακρίβεια. Το setIntervalMillis ορίζει το επιθυμητό διάστημα ενημέρωσης (5 δευτερόλεπτα), το setMinUpdateIntervalMillis — το ελάχιστο (2 δευτερόλεπτα). Το callback onLocationResult καλείται κάθε φορά που το σύστημα λαμβάνει νέες συντεταγμένες. Είναι σημαντικό να ελέγχετε την άδεια πριν καλέσετε το requestLocationUpdates — διαφορετικά η εφαρμογή θα καταρρεύσει με SecurityException.
import CoreLocation
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
// MARK: - CLLocationManagerDelegate
func locationManager(
_ manager: CLLocationManager,
didUpdateLocations locations: [CLLocation]
) {
guard let location = locations.last else { return }
print("Location: \(location.coordinate.latitude), \(location.coordinate.longitude)")
}
Στο iOS, το desiredAccuracy καθορίζει την ακρίβεια του αιτήματος: το kCLLocationAccuracyBest χρησιμοποιεί όλες τις διαθέσιμες πηγές (GPS + Wi-Fi + κινητά δίκτυα). Μετά την αίτηση άδειας μέσω requestWhenUseAuthorization, το σύστημα εμφανίζει διάλογο στον χρήστη. Ο εκπρόσωπος didUpdateLocations λαμβάνει μια συστοιχία αντικειμένων CLLocation με συντεταγμένες, υψόμετρο, ταχύτητα και κατεύθυνση. Για διακοπή των ενημερώσεων, καλείται το stopUpdatingLocation για εξοικονόμηση μπαταρίας.
Η πρόσβαση σε γεωτοποθεσία απαιτεί ρητή άδεια του χρήστη και στις δύο πλατφόρμες. Στο Android χρησιμοποιούνται οι άδειες ACCESS_FINE_LOCATION (GPS) και ACCESS_COARSE_LOCATION (Wi-Fi/κινητά δίκτυα). Από το Android 10, η πρόσβαση στο παρασκήνιο απαιτεί ξεχωριστή άδεια ACCESS_BACKGROUND_LOCATION. Στο iOS είναι διαθέσιμα τρία επίπεδα: requestWhenInUseAuthorization (μόνο όταν η εφαρμογή είναι ενεργή), requestAlwaysAuthorization (στο παρασκήνιο) και χρονικές σημάνσεις για ακριβή εντοπισμό. Η Apple απαιτεί υποχρεωτική περιγραφή στο Info.plist: NSLocationWhenInUseUsageDescription ή NSLocationAlwaysAndWhenInUseUsageDescription. Χωρίς αυτά τα κλειδιά, το αίτημα άδειας αγνοείται.
Η συνεχής χρήση GPS μειώνει σημαντικά τη διάρκεια ζωής της μπαταρίας — έως 30% ανά ώρα συνεχούς λειτουργίας σε μέγιστη ακρίβεια. Για βελτιστοποίηση της κατανάλωσης ενέργειας, συνιστάται η χρήση γεωτοποθεσίας μόνο όταν είναι απαραίτητο και η διακοπή ενημερώσεων όταν η εφαρμογή πηγαίνει στο παρασκήνιο. Στο Android, το FusedLocationProviderClient μεταβαίνει αυτόματα μεταξύ GPS και δικτυακών πηγών ανάλογα με τη διαθεσιμότητα και την προτεραιότητα του αιτήματος. Στο iOS, χρησιμοποιήστε την υπηρεσία σημαντικών αλλαγών τοποθεσίας (startMonitoringSignificantLocationChanges) για ενημερώσεις με ελάχιστη κατανάλωση ενέργειας — η ακρίβεια είναι χαμηλότερη (έως 500 μέτρα), αλλά η μπαταρία σχεδόν δεν καταναλώνεται. Επίσης, εφαρμόστε μαζική επεξεργασία: συλλέξτε συντεταγμένες σε διάστημα 5-10 λεπτών και στείλτε στον διακομιστή με ένα αίτημα μέσω WorkManager σε Android ή BGTaskScheduler σε iOS. Η μείωση της συχνότητας αιτημάτων από 1 δευτερόλεπτο σε 30 δευτερόλεπτα μειώνει την κατανάλωση ενέργειας γεωτοποθεσίας κατά 85%.
Γεωτοποθεσία χρησιμοποιείται σε ένα ευρύ φάσμα εφαρμογών κινητών: από πλοηγούς έως υπηρεσίες παράδοσης. Τα πιο κοινά σενάρια περιλαμβάνουν εμφάνιση του χρήστη στον χάρτη, γεωστόχευση διαφημίσεων, παρακολούθηση ταχυμεταφορών, γεωπερίφραξη για ειδοποιήσεις push και παρακολούθηση δραστηριότητας γυμναστικής. Κάθε σενάριο απαιτεί τη δική του προσέγγιση στην ακρίβεια και τη συχνότητα ενημερώσεων. Παρακάτω υπάρχει ένας πίνακας με συστάσεις διαμόρφωσης για διαφορετικούς τύπους εφαρμογών.
| Τύπος εφαρμογής | Ακρίβεια | Διάστημα | Λειτουργία παρασκηνίου |
|---|---|---|---|
| Πλοηγός | HIGH (GPS) | 1-2 δευτ | Ναι |
| Παράδοση | BALANCED (GPS+Wi-Fi) | 10-30 δευτ | Ναι |
| Καιρός | LOW (Wi-Fi/κινητά δίκτυα) | Εφάπαξ | Όχι |
| Κοινωνικό δίκτυο | BALANCED | Κατά το άνοιγμα | Όχι |
| Γυμναστική | HIGH (GPS) | 5-10 δευτ | Ναι |
Κατά τον σχεδιασμό λειτουργικότητας γεωτοποθεσίας, είναι σημαντικό να λαμβάνεται υπόψη ότι οι χρήστες μπορούν να ανακαλέσουν την άδεια ανά πάσα στιγμή μέσω των ρυθμίσεων συστήματος. Η εφαρμογή πρέπει να χειρίζεται σωστά την κατάσταση όταν η γεωτοποθεσία δεν είναι διαθέσιμη και να εμφανίζει σαφή επεξήγηση γιατί η λειτουργικότητα είναι περιορισμένη.
Geofencing — τεχνολογία δημιουργίας εικονικών ορίων στον χάρτη, κατά τη διέλευση των οποίων η εφαρμογή λαμβάνει ειδοποίηση. Στο Android, οι γεωπεριφράξεις υλοποιούνται μέσω GeofencingClient από το Google Play Services, στο iOS — μέσω CLCircularRegion από το Core Location. Κατά την είσοδο ή έξοδο από μια ζώνη, το σύστημα αφυπνίζει την εφαρμογή και στέλνει ένα συμβάν ακόμα κι αν η εφαρμογή είναι κλειστή ή ελαχιστοποιημένη. Αυτό χρησιμοποιείται για ειδοποιήσεις push κατά την προσέγγιση σε κατάστημα, υπενθυμίσεις εργασιών βάσει τοποθεσίας και αυτοματοποίηση συσκευών IoT. Ο μέγιστος αριθμός γεωπεριφράξεων είναι περιορισμένος: στο Android — 100, στο iOS — 20 ταυτόχρονα. Η ελάχιστη ακτίνα ζώνης είναι 50 μέτρα και στις δύο πλατφόρμες, διαφορετικά το σύστημα μπορεί να μην αντιδράσει λόγω σφάλματος καθορισμού τοποθεσίας. Κατά την είσοδο σε ζώνη, το σύστημα εκκινεί ένα Intent στο Android ή καλεί τον εκπρόσωπο locationManager:didEnterRegion στο iOS.
Συχνές ερωτήσεις
GPS στο smartphone είναι ένας ενσωματωμένος δέκτης σημάτων του δορυφορικού συστήματος πλοήγησης που καθορίζει συντεταγμένες με ακρίβεια 3-5 μέτρων. Στις συσκευές είναι επίσης διαθέσιμα GLONASS, Galileo και BeiDou για αύξηση της ακρίβειας και ταχύτητας εντοπισμού θέσης.
Το GPS είναι μόνο η δορυφορική μέθοδος καθορισμού συντεταγμένων. Οι υπηρεσίες γεωτοποθεσίας συνδυάζουν GPS, εντοπισμό Wi-Fi και δεδομένα κεραιών κινητής τηλεφωνίας για ταχύτερο και ενεργειακά αποδοτικότερο καθορισμό τοποθεσίας, ειδικά σε εσωτερικούς χώρους.
Καλέστε requestWhenInUseAuthorization() ή requestAlwaysAuthorization() σε ένα στιγμιότυπο CLLocationManager. Προσθέστε προηγουμένως το NSLocationWhenInUseUsageDescription στο Info.plist με σαφές κείμενο του λόγου χρήσης γεωτοποθεσίας.
Χρησιμοποιήστε FusedLocationProviderClient σε Android και significant-change location service σε iOS. Αυξήστε το διάστημα μεταξύ αιτημάτων σε 10-30 δευτερόλεπτα, απενεργοποιήστε τις ενημερώσεις όταν η οθόνη είναι σβηστή και εφαρμόστε μαζική αποστολή συντεταγμένων στον διακομιστή.
Ναι, χωρίς GPS μπορεί να καθοριστεί κατά προσέγγιση τοποθεσία μέσω σημείων πρόσβασης Wi-Fi (ακρίβεια 10-50 μέτρα) ή κεραιών κινητής τηλεφωνίας (ακρίβεια 100-5000 μέτρα). Στο Android, για αυτό χρησιμοποιείται το ACCESS_COARSE_LOCATION.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης