GPS وخدمات تحديد المواقع في التطبيقات المحمولة هي واجهات برمجة تطبيقات لتحديد الموقع الفعلي للجهاز باستخدام الأقمار الصناعية وWi-Fi والشبكات المحمولة. وفقًا لـ Google Android Location Guide (2025)، أكثر من 60% من التطبيقات المحمولة تستخدم بيانات الموقع لتخصيص المحتوى. Fused Location Provider على Android يدمج مصادر متعددة لتحسين الدقة وتقليل استهلاك الطاقة.
الخلاصة
GPS (نظام تحديد المواقع العالمي) هو نظام ملاحة عبر الأقمار الصناعية يتكون من 31 قمرًا صناعيًا نشطًا في مدار على ارتفاع حوالي 20,200 كم. على الأجهزة المحمولة، تستقبل شريحة GPS إشارات من الأقمار الصناعية وتحسب الإحداثيات بناءً على التثليث — قياس وقت انتقال الإشارة من أقمار صناعية متعددة. تضيف خدمات تحديد المواقع في أنظمة التشغيل المحمولة بيانات من نقاط الوصول Wi-Fi وأبراج الخلايا إلى GPS لتسريع تحديد الموقع (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 (GPS المساعد) يسرع البدء عن طريق تنزيل بيانات التقويم الفلكي للأقمار الصناعية عبر الإنترنت بدلاً من انتظار البيانات من الأقمار الصناعية.
Wi-Fi لتحديد الموقع يستخدم قاعدة بيانات عناوين MAC لنقاط الوصول ذات الإحداثيات المعروفة. الدقة تتراوح بين 10-50 مترًا في نطاق تغطية Wi-Fi. أبراج الخلايا توفر دقة تتراوح بين 100 متر إلى عدة كيلومترات حسب كثافة الأبراج. دمج جميع المصادر (Fused Location) يسمح بالحصول على إحداثيات بدقة معقولة مع استهلاك طاقة ضئيل — خاصة عند إيقاف تشغيل شريحة GPS أو عدم توفر إشارات الأقمار الصناعية.
على كلتا المنصتين، خدمات تحديد المواقع مطبقة عبر واجهات برمجة تطبيقات النظام بمستويات مختلفة من التجريد. Android يستخدم FusedLocationProviderClient من Google Play Services، iOS يستخدم CLLocationManager من Core Location. كلتا الواجهتين تسمحان بطلب موقع لمرة واحدة أو الاشتراك في تحديثات دورية. فيما يلي مثال للحصول على الإحداثيات على 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 مع PRIORITY_HIGH_ACCURACY — وهذا يشغل GPS للحصول على أقصى دقة. setIntervalMillis يحدد الفاصل الزمني المطلوب للتحديث (5 ثوانٍ)، setMinUpdateIntervalMillis يحدد الحد الأدنى للفاصل الزمني (ثانيتين). يتم استدعاء callback onLocationResult في كل مرة يتلقى فيها النظام إحداثيات جديدة. من المهم التحقق من الإذن قبل استدعاء requestLocationUpdates — وإلا سيتعطل التطبيق مع خطأ SecurityException.
import CoreLocation
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
// علامة: - 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 + خلايا). بعد طلب الإذن عبر requestWhenInUseAuthorization، يعرض النظام حوارًا للمستخدم. المفوض 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. تقليل تردد الطلبات من ثانية واحدة إلى 30 ثانية يقلل استهلاك طاقة تحديد المواقع بنسبة 85%.
تحديد المواقع يُستخدم في مجموعة واسعة من التطبيقات المحمولة: من الملاحين إلى خدمات التوصيل. تشمل السيناريوهات الأكثر شيوعًا عرض المستخدم على الخريطة، الإعلانات المستهدفة جغرافيًا، تتبع السعاة، السياجات الجغرافية للإشعارات الفورية، وتتبع النشاط الرياضي. كل سيناريو يتطلب منهجًا خاصًا للدقة وتكرار التحديثات. فيما يلي جدول بتوصيات الإعداد لأنواع مختلفة من التطبيقات.
| نوع التطبيق | الدقة | الفاصل الزمني | وضع الخلفية |
|---|---|---|---|
| ملاح | 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. عند دخول أو مغادرة منطقة، يقوم النظام بتنبيه التطبيق وإرسال حدث حتى إذا كان التطبيق مغلقًا أو مصغرًا. يُستخدم هذا للإشعارات الفورية عند الاقتراب من متجر، تذكيرات المهام المستندة إلى الموقع، وأتمتة أجهزة IoT. الحد الأقصى لعدد السياجات الجغرافية محدود: 100 على Android، 20 على iOS في وقت واحد. نصف القطر الأدنى للمنطقة هو 50 مترًا على كلتا المنصتين — وإلا قد لا يعمل النظام بسبب عدم دقة تحديد الموقع. عند دخول المنطقة، يقوم النظام بتشغيل Intent على Android أو استدعاء المفوض locationManager:didEnterRegion على iOS.
الأسئلة الشائعة
GPS في الهاتف الذكي هو مستقبل مدمج لإشارات نظام الملاحة عبر الأقمار الصناعية يحدد الإحداثيات بدقة تتراوح بين 3-5 أمتار. الأجهزة تدعم أيضًا GLONASS وGalileo وBeiDou لتحسين الدقة وسرعة تحديد الموقع.
GPS هو مجرد طريقة قمر صناعي لتحديد الإحداثيات. خدمات تحديد المواقع تجمع بين GPS وتحديد المواقع عبر Wi-Fi وبيانات أبراج الخلايا لتحديد موقع أسرع وأكثر كفاءة في استهلاك الطاقة، خاصة داخل المباني.
استدع requestWhenInUseAuthorization() أو requestAlwaysAuthorization() على مثيل CLLocationManager. أولاً، أضف NSLocationWhenInUseUsageDescription في Info.plist مع شرح واضح لسبب الحاجة إلى تحديد الموقع.
استخدم FusedLocationProviderClient على Android وخدمة تغيير الموقع الهامة على iOS. زد الفاصل الزمني بين الطلبات إلى 10-30 ثانية، أوقف التحديثات عند إيقاف تشغيل الشاشة، وطبق الإرسال المجمع للإحداثيات إلى الخادم.
نعم، بدون GPS يمكن تحديد الموقع التقريبي باستخدام نقاط الوصول Wi-Fi (دقة 10-50 مترًا) أو أبراج الخلايا (دقة 100-5000 متر). على Android، يتم استخدام ACCESS_COARSE_LOCATION لهذا الغرض.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا