«Significant Location Change (SLC)» هو خدمة iOS لمراقبة التنقلات الكبيرة للجهاز، وهي تُخطر التطبيق فقط عند وقوع تغيرات كبيرة في الإحداثيات الجغرافية. وخلافًا لتتبع GPS الفوري، تستخدم SLC أبراج الخلايا المحمولة لتحديد الموقع، مما يضمن استهلاكاً أدنى للطاقة. وفقًا لوثائق Apple Developer, 2025، يسمح Significant Location Change للتطبيق باستقبال تحديثات الموقع الجغرافي دون تشغيل GPS مستمر، مما يوفر تصل إلى 90% من شحن البطارية مقارنة بالتتبع المستمر.
النقاط الرئيسية
Significant Location Change (SLC) هو خدمة موقع جغرافي موفرة للطاقة من iOS مضمنة في إطار Core Location. وهي مصممة للتطبيقات التي تحتاج إلى تتبع التنقلات الكبيرة للمستخدم دون استخدام وحدة GPS بشكل مستمر. تنشط SLC تلقائيًا عند التبديل بين أبراج الخلايا وتخطر التطبيق عبر المفوض به CLLocationManagerDelegate بطريقة didUpdateLocations.
وخلافًا لتتبع مستوى GPS (القياسي startUpdatingLocation)، لا تتطلب SLC نشاطًا مستمرًا للمعالج أو شريحة GPS. تستخدم iOS إشارات أبراج الخلايا لتحديد الموقع التقريبي وتُطلق التطبيق فقط عند اكتشاف فرق كبير في الإحداثيات. يتيح هذا للتطبيق أن «ينام» بين التحديثات، مستهلكًا حدودًا أدنى من الطاقة.
SLC متاحة على جميع الأجهزة المزودة بوحدة خلوية، بدءًا من iOS 5. في iPod Touch وiPad Wi-Fi Only، لا تتوفر الخدمة لأنها تستخدم أبراج الخلايا لتحديد الإحداثيات. Core Location تقرر تلقائيًا أي الأحداث تعتبر كبيرة — لا يمكن للمطور تكوين حساسية SLC أو تحديد مسافة دنيا للمحفز.
SLC مثالية للتطبيقات التي لا تتطلب دقة عالية في الموقع الجغرافي: متتبعات الطقس، خدمات التوصيل، تطبيقات البحث عن الأماكن القريبة وتحليل الأماكن الزارة. كما تستخدم iOS خدمة SLC لتفعيل السياجة الجغرافية (Geofencing) في وضع توفير الطاقة. تتطلب تطبيقات الملاحة تتبع GPS أكثر دقة.
Significant Location Change يعمل عن طريق تحليل معرفات أبراج الخلايا (Cell ID) التي يتلقاها الجهاز عند الاتصال بالشبكة. تحتفظ iOS بقاعدة بيانات لإحداثيات الأبراج ويمكنها تحديد الموقع التقريبي دون تشغيل GPS. عندما يتحول الجهاز إلى برج جديد، يقارن النظام الموقع الجديد والسابق وإذا كان الفرق كبيرًا، يُطلق التطبيق لمعالجة الحدث.
يستخدم النظام نهج المجموعات: يتم تقسيم المساحة الجغرافية إلى مجموعات ذات نصف قطر محدد. تقوم SLC بتوليد حدث فقط عند عبور حد المجموعة، وليس مع كل حركة صغيرة داخلها. هذا يمنع استدعاءات التطبيق المتتالية عند التنقل داخل نفس منطقة التغطية (على سبيل المثال، داخل مبنى أو حي). تتراوح دقة SLC من 500 متر إلى عدة كيلومترات حسب كثافة أبراج الخلايا.
عندما تكتشف iOS تغييرًا كبيرًا، تُيقظ التطبيق من الحالة خلفية (إذا لم يكن قيد التشغيل) وتُمرر الحدث إلى مفوض Core Location. يتلقى التطبيق وقتًا قصيرًا للمعالجة (حوالي 10–30 ثانية من الوقت خلفي) — كافٍ لمعالجة الإحداثيات و، عند الضرورة، جدولة تحديث أكثر دقة عبر GPS.
SLC لها امتياز إيقاظ التطبيق من الحالة الموقفة أو خلفية. إذا كان التطبيق قد أنهي بواسطة النظام بسبب ضغط الذاكرة، ستقوم SLC بإعادة تشغيله (إعادة الإطلاق) في الخلفية. للقيام بذلك، يجب على التطبيق الاشتراك في UIApplication.LaunchOptionsKey.location في طريقة didFinishLaunchingWithOptions. بعد معالجة الحدث، قد يعيد النظام التطبيق إلى الحالة الموقفة.
تتحدد محفزات SLC حصريًا بواسطة نظام iOS — لا يمكن للمطور التأثير برمجيًا على أي تغييرات في الإحداثيات تعتبر كبيرة. ومع ذلك، توجد سيناريوهات موثقة فيها تقوم SLC بتوليد حدث بضمان. فهم هذه المحفزات يساعد المطور على تصميم سلوك صحيح للتطبيق.
تغيير برج الخلايا هو المحفز الرئيسي لـ SLC. عندما يتحول الجهاز بين أبراج الخلايا (عند التنقل عبر المدينة أو الطريق)، يتحقق النظام من ما إذا كانت الإحداثيات قد تغيرت بشكل كافٍ بين البرج القديم والجديد. إذا كان كذلك، يتم توليد حدث. في المناطق الحضرية ذات شبكة أبراج كثيفة، قد تنشط SLC كل 1–3 كيلومترات.
إذا قام أي تطبيق آخر أو خدمة نظام (على سبيل المثال، ابحث عن iPhone أو الملاحة) بتفعيل وحدة GPS، فقد تتلقى SLC أيضًا تحديثًا دقيقًا للإحداثيات. هذا هو تأثير جانبي: يحدد GPS الموقع الدقيق، وتنقله iOS إلى جميع التطبيقات المشتركة في SLC. ومع ذلك، لا يوصى بالاعتماد على هذا المحفز — فهو غير مضمون.
على الرغم من أن SLC لا تستخدم Wi-Fi بشكل مباشر، فإن تبديل شبكة Wi-Fi قد يتسبب في حدث بشكل غير مباشر إذا تلقى الجهاز إحداثيات جديدة عبر خدمة تحديد الموقع من Apple (الموقع القائم على قاعدات بيانات Wi-Fi). تقوم iOS بتجزيئة إحداثيات نقاط الوصول Wi-Fi وتستخدمها لتحسين الموقع بين تبديلات الأبراج.
| المحفز | الضمان | الزمن المنقضي | الدقة |
|---|---|---|---|
| تغيير برج الخلية | عالي | 1–30 ثانية | 500 م – 3 كم |
| GPS من تطبيقات أخرى | منخفض | فوري | تصل إلى 10 م |
| تغيير Wi-Fi | متوسط | تصل إلى 5 دقائق | 100–500 م |
توفر iOS عدة آليات للحصول على الموقع الجغرافي، كل منها له دقته واستهلاكه للطاقة وحالات استخدامه. Significant Location Change تحتل مكانًا بين التقريب التقريبي بواسطة الأبراج وتتبع GPS الدقيق، مقدمة توازنًا أمثلًا للتطبيقات التي لا تحتاج دقة عالية بالضرورة.
تستخدم خدمة الموقع القياسية (startUpdatingLocation()) كلٍا من GPS وWi-Fi وأبراج الخلايا للحصول على أقصى دقة في تحديد الإحداثيات. الدقة تصل إلى 10 أمتار، لكن استهلاك الطاقة مرتفع — وحدة GPS نشطة بشكل مستمر. مناسبة للملاحة ومتتبعات اللياقة البدنية وتطبيقات الواقع المعزز. بالمقابل، إن SLC لا تستخدم GPS بشكل مستمر ودقتها 500 متر أو أقل.
تتبع مراقبة المنطقة الدخول والخروج من المناطق الجغرافية المحددة. وخلافًا لـ SLC، فإن المطور يحدد حدود المناطق (نصف قطر من 100 متر). تستخدم السياجة الجغرافية SLC كآلية مساعدة — يحدد النظام أولًا الموقع التقريبي عبر SLC، ثم ينشط GPS للكشف الدقيق عن الدخول/الخروج. العدد الأقصى للمناطق المراقبة هو 20.
مراقبة الزيارات هي خدمة متخصصة من iOS 8+ تتبع زيارات الأماكن (الوصول والمغادرة). تستخدم مزيجًا من SLC وإشارات أخرى لتحديد وقت توقف المستخدم في مكان ما ووقت مغادرته. إن مراقبة الزيارات أكثر كفاءة في استهلاك الطاقة من SLC، حيث أنها تولد عددًا أقل من الأحداث وتستخدم التعلم الآلي على الجهاز.
| الخدمة | الدقة | استهلاك الطاقة | الخلفية |
|---|---|---|---|
| SLC | 500 م – 3 كم | منخفض جدًا | نعم |
| GPS القياسي | تصل إلى 10 م | مرتفع | يتطلب إذنًا |
| السياجة الجغرافية | من 100 م | منخفض | نعم |
| مراقبة الزيارات | تصل إلى 100 م | منخفض جدًا | نعم |
SLC هي أكثر طريقة موفرة للطاقة للحصول على الموقع الجغرافي في iOS، باستثناء مراقبة الزيارات. وفقًا لبيانات Apple، تستهلك SLC تقريبًا 0,1–0,5% من شحن البطارية في الساعة في سيناريو استخدام نموذجي، بينما يمكن لتتبع GPS المستمر أن يستهلك 5–10% في الساعة. يتحقق التوفير لأن وحدة GPS تُنشط فقط لفترة قصيرة للتحقق من الإحداثيات في كل حدث.
تدير iOS استهلاك طاقة SLC من خلال تحسين البطارية. إذا لاحظ النظام أن التطبيق يعالج أحداث SLC بكثرة (على سبيل المثال، الجهاز يتنقل في قطار وتولّد تغييرات الأبراج المتكررة العديد من الأحداث)، قد تقلل iOS من تكرار الإشعارات مؤقتًا. هذه آلية تلقائية — لا يمكن للمطور تعطيلها.
مع كل إصدار رئيسي لـ iOS، تشدد Apple سياسات الوصول إلى الموقع الجغرافي في الخلفية. بدءًا من iOS 13، تغير حوار النظام لطلب إذن الموقع في الخلفية: يجب على المستخدم اختيار «دائما» صراحةً بدلًا من «أثناء استخدام التطبيق» فقط. دون إذن «دائما»، لن تعمل SLC عندما يكون التطبيق في الخلفية أو منهيًا بواسطة النظام.
دعنا ننظر إلى تنفيذ كامل لـ Significant Location Change بلغة Swift. يتضمن المثال تكوين CLLocationManager، طلب إذن «دائما»، بدء المراقبة، معالجة الأحداث ودعم إعادة تشغيل التطبيق بعد إنهائه بواسطة النظام. يستخدم الكود Swift الحديث مع async/await لمعالجة الإحداثيات والمهام خلفية عبر BGTaskScheduler.
import CoreLocation
import UIKit
class LocationManager: NSObject, CLLocationManagerDelegate {
private let manager = CLLocationManager()
override init() {
super.init()
manager.delegate = self
manager.pausesLocationUpdatesAutomatically = true
manager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
}
func requestAlwaysAuthorization() {
manager.requestAlwaysAuthorization()
}
func startSignificantLocationUpdates() {
manager.startMonitoringSignificantLocationChanges()
}
func locationManager(_ manager: CLLocationManager,
didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last else { return }
Task.detached {
await LocationProcessor.handleLocationUpdate(location)
}
}
func locationManager(_ manager: CLLocationManager,
didFailWithError error: Error) {
Logger.log("SLC error: \(error.localizedDescription)")
}
}
إذا كان التطبيق قد أنهي بواسطة النظام، فإن SLC ستُعيد تشغيله تلقائيًا عند وقوع حدث جديد. في AppDelegate، يجب إضافة تحقق من البدء بحدث الموقع عبر UIApplication.LaunchOptionsKey.location. بعد إعادة التشغيل، يجب على التطبيق تهيئة CLLocationManager واستدعاء startMonitoringSignificantLocationChanges() لمتابعة المراقبة.
class AppDelegate: NSObject, UIApplicationDelegate {
private let manager = LocationManager()
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if launchOptions?.keys.contains(.location) == true {
Logger.log("App relaunched by SLC event")
}
manager.requestAlwaysAuthorization()
manager.startSignificantLocationUpdates()
return true
}
}
يتطلب الاستخدام الصحيح لـ Significant Location Change توازنًا بين الوظائفية وكفاءة الطاقة. تتحكم Apple بشدة في الوصول إلى الموقع الجغرافي في الخلفية، والتطبيقات التي تسيء استخدام SLC أو تستخدمها دون ضرورة واضحة تخاطر الرفض عند النشر في متجر التطبيقات.
في Info.plist، يجب إضافة نصوص التبرير: NSLocationAlwaysAndWhenInUseUsageDescription و NSLocationWhenInUseUsageDescription. يجب أن يشرح الوصف بوضوح لماذا يحتاج التطبيق إلى الوصول إلى الموقع الجغرافي في الخلفية. تقرأ مراجعة App Review هذه النصوص وقد ترفض التطبيق إذا كان التبرير غير كافٍ أو الصياغة غامضة. مثال: «يستخدم هذا التطبيق SLC لتحديث توقعات الطقس عند تنقلك.»
لا تبدأ عمليات مكلفة (موقع GPS، طلبات الشبكة) مع كل حدث SLC. قد تولّد SLC عشرات الأحداث في الساعة عند التنقل بالوسائل. استخدم «التخفيف» (تجنب الارتداد): احفظ وقت آخر تحديث كامل وتخط المعالجة إذا مر أقل من 5–10 دقائق منذ آخر تحديث. سيوفر ذلك البطارية وحركة الشبكة.
للمعالجة المطولة بعد حدث SLC، استخدم BGTaskScheduler. عندما يتلقى التطبيق حدث SLC، يمكنه جدولة مهمة خلفية عبر BGProcessingTaskRequest أو BGAppRefreshTaskRequest. يسمح هذا بتأجيل العمليات المستهلكة للموارد (المزامنة مع الخادم، تحليل المسار) إلى أقرب نافذة تنفيذ خلفية، دون حجب السلسلة الرئيسية لاستجابة SLC.
الأسئلة الشائعة
Significant Location Change (SLC) هي خدمة iOS موفرة للطاقة لمراقبة التنقلات الكبيرة للجهاز بناءً على أبراج الخلايا. تستهلك طاقة أقل بنسبة تصل إلى 90% مقارنة بتتبع GPS المستمر وهي مناسبة للتطبيقات التي لا تتطلب دقة عالية في الموقع الجغرافي.
تتراوح دقة SLC من 500 متر إلى 3 كيلومترات حسب كثافة أبراج الخلايا. في المناطق الحضرية، الدقة أعلى (أقرب إلى 500 م)، بينما في المناطق الريفية تكون أقل (تصل إلى عدة كيلومترات). SLC ليست مصممة لتحديد الإحداثيات بدقة — إنها مورد للمراقبة التقريبية للتنقلات.
استدعي CLLocationManager.requestAlwaysAuthorization() بعد إضافة نص NSLocationAlwaysAndWhenInUseUsageDescription إلى Info.plist. بدءًا من iOS 13، يجب على المستخدم اختيار «دائما» صراحة في حوار النظام. دون هذا الإذن، لن تعمل SLC في الخلفية.
نعم، يمكن SLC إعادة تشغيل تطبيق إذا كان قد أنهي بواسطة النظام بسبب ضغط الذاكرة. عند التشغيل، تحقق من وجود UIApplication.LaunchOptionsKey.location في طريقة didFinishLaunchingWithOptions واستدعي startMonitoringSignificantLocationChanges() لمتابعة المراقبة.
تستخدم SLC فقط أبراج الخلايا ولا تنشط GPS بشكل مستمر، مما يوفر تصل إلى 90% من البطارية. تتراوح الدقة من 500 م إلى 3 كم. تستخدم خدمة الموقع القياسية GPS وWi-Fi والأبراج، بدقة تصل إلى 10 م، ولكنها تستهلك طاقة أكبر بكثير. SLC مناسبة للمراقبة في الخلفية، وGPS للملاحة.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا