Significant Location Change (SLC) iOS cihazın böyük hərəkətlərini izləmək üçün xidmətdir və tətbiqi yalnız coğrafi koordinatlarda əhəmiyyətli dəyişikliklər olduqda xəbərdar edir. Real vaxt rejimində GPS izləmədən fərqli olaraq, SLC yer müyyən etmək üçün mobil telefon stansiyalarından istifadə edir ki, bu da minimal enerji sərfiyyatı təmin edir. Apple Developer, 2025 sənədlərinə görə, Significant Location Change tətbiqə davamlı GPS işi olmadan geopoziya yeniləmələri almağa imkan verir və davamlı izləmə ilə müqayisədə batareyanın 90%-ə qədər qənaət edir.
Əsas məqamlar
Significant Location Change (SLC) Core Location çərçivəsinə daxil edilmiş enerjiyə qənaət edən iOS geolokasiya xidmətidir. O, GPS modulundan davamlı istifadə etmədən istifadəçinin böyük hərəkətlərini izləməli olan tətbiqlər üçün nəzərdə tutulub. SLC mobil telefon stansiyaları arasında keçid zamanı avtomatik aktivləşir və tətbiqi CLLocationManagerDelegate vasitəsilə didUpdateLocations metodu ilə xəbərdar edir.
GPS-level tracking-dən (standart startUpdatingLocation) fərqli olaraq, SLC prosessor və GPS çipinin davamlı aktivliyini tələb etmir. iOS təxmini yer müyyən etmək üçün mobil stansiya siqnallarından istifadə edir və tətbiqi yalnız koordinatlarda əhəmiyyətli fərq aşkar edildikdə işə salır. Bu, tətbiqə yeniləmələr arasında “yuxuya getməyə” imkan verir, minimum enerji sərf edir.
SLC iOS 5-dən etibarən mobil modulu olan bütün cihazlarda mövcuddur. iPod Touch və iPad Wi-Fi Only-də xidmət mövcud deyil, çünki koordinatları müyyən etmək üçün məhz mobil stansiyalardan istifadə olunur. Core Location hansı hadisələrin əhəmiyyətli sayılacağını avtomatik müyyən edir — tərtibatçı SLC-nin həssaslığını konfiqurasiya edə və ya tetik üçün minimum məsafəni təyin edə bilməz.
SLC yüksək dəqiqlik tələb etməyən tətbiqlər üçün idealdır: hava proqnozu tətbiqləri, çatdırılma xidmətləri, yaxın obyektləri axtarma tətbiqləri, ziyarət edilən yerlərin analitikası. SLC həmçinin iOS sistemi tərəfindən enerji qənaət rejimində geozonları (Geofencing) aktivləşdirmək üçün istifadə olunur. Naviqasiya tətbiqləri daha dəqiq GPS izləmə tələb edir.
Significant Location Change cihazın şəbəkəyə qoşularkən aldığı mobil stansiya identifikatorlarının (Cell ID) təhlili əsasında işləyir. iOS stansiya koordinatlarının verilənlər bazasını saxlayır və GPS-i işə salmadan təxmini yeri müyyən edə bilər. Cihaz yeni stansiyaya keçdikdə, sistem yeni və əvvəlki yeri müqayisə edir və fərq əhəmiyyətli olarsa, hadisəni emal etmək üçün tətbiqi işə salır.
Sistem klaster yanaşmasından istifadə edir: coğrafi məkan müəyyən radiuslu klasterlərə bölünür. SLC yalnız klaster sərhədi keçildikdə hadisə yaradır, onun daxilindəki hər bir mikro-hərəkətdə yox. Bu, bir əhatə zonası daxilində (məsələn, binada və ya məhəllədə) hərəkət edərkən tətbiqin kütləvi çağırışlarının qarşısını alır. Dəqiqlik SLC mobil stansiyaların sıxlığından asılı olaraq 500 metrdən bir neçə kilometrə qədər dəyişir.
iOS əhəmiyyətli dəyişiklik müyyən etdikdə, tətbiqi fon vəziyyətindən oyadır (işə salınmayıbsa) və hadisəni Core Location nümayəndəsinə ötürür. Tətbiq emal üçün qısa vaxt alır (təxminən 10–30 saniyə fon vaxtı) — bu müddətdə koordinatları emal etmək və lazım gəldikdə GPS vasitəsilə daha dəqiq yeniləmə planlaşdırmaq lazımdır.
SLC tətbiqi Suspended və ya Background vəziyyətindən oyatmaq imtiyazına malikdir. Tətbiq yaddaş çatışmazlığı səbəbindən sistem tərəfindən öldürülübsə, SLC onu fonda yenidən işə salacaq (relaunch). Bunun üçün tətbiq didFinishLaunchingWithOptions metodunda UIApplication.LaunchOptionsKey.location-a abunə olmalıdır. Hadisə emal edildikdən sonra sistem tətbiqi yenidən Suspended vəziyyətinə keçirə bilər.
Tetik SLC yalnız iOS sistemi tərəfindən müyyən edilir — tərtibatçı hansı koordinat dəyişikliyinin “əhəmiyyətli” sayılacağına proqramlı şəkildə təsir edə bilməz. Bununla belə, SLC-nin zəmanətli hadisə yaratdığı sənədləşdirilmiş ssenarilər mövcuddur. Bu tetikləri başa düşmək tərtibatçıya tətbiqin düzgün davranışını layihələndirməyə kömək edir.
Cell tower change — SLC-nin əsas tetikidir. Cihaz mobil stansiyalar arasında keçid edərkən (şəhərdə, yolda hərəkət edərkən), sistem köhnə və yeni stansiya arasında koordinatların kifayət qədər dəyişib-dəyişmədiyini yoxlayır. Əgər bəli — hadisə yaradılır. Sıx stansiya şəbəkəsi olan şəhər şəraitində SLC hər 1–3 kilometrdən bir işə düşə bilər.
Hər hansı digər tətbiq və ya sistem xidməti (məsələn, “iPhone-u Tap”, naviqasiya) GPS modulunu işə salarsa, SLC də dəqiq koordinatların yenilənməsini ala bilər. Bu yan təsirdir: GPS dəqiq yeri müyyən edir və iOS onu SLC-yə abunə olan bütün tətbiqlərə ötürür. Lakin bu tetikə etibar etmək olmaz — o zəmanətli deyil.
SLC birbaşa Wi-Fi istifadə etməsə də, Wi-Fi şəbəkəsinin dəyişməsi dolayı yolla hadisəyə səbəb ola bilər, əgər cihaz Apple Location Service vasitəsilə yeni koordinatlar alarsa (Wi-Fi məlumat bazaları əsasında yer müyyən etmə). iOS Wi-Fi giriş nöqtələrinin koordinatlarını heşləyir və stansiya dəyişiklikləri arasında mövqeni dəqiqləşdirmək üçün istifadə edir.
| Tetik | Zəmanət | Gecikmə | Dəqiqlik |
|---|---|---|---|
| Mobil stansiyanın dəyişməsi | Yüksək | 1–30 san | 500 m – 3 km |
| Digər tətbiqlərin GPS-i | Aşağı | Ani | 10 m-ə qədər |
| Wi-Fi dəyişməsi | Orta | 5 dəq-ə qədər | 100–500 m |
iOS geolokasiya əldə etmək üçün bir neçə mexanizm təqdim edir, hər birinin öz dəqiqliyi, enerji sərfiyyatı və istifadə ssenariləri var. Significant Location Change stansiyalar üzrə təxmini yerləşmə ilə dəqiq GPS izləmə arasında niş tutur, real vaxtda yüksək dəqiqlik tələb etməyən tətbiqlər üçün optimal balans təklif edir.
Standard Location Service (startUpdatingLocation()) maksimum dəqiqliklə koordinatları müyyən etmək üçün GPS, Wi-Fi və mobil stansiyalardan istifadə edir. Dəqiqlik 10 metrə qədər, lakin enerji sərfiyyatı yüksəkdir — GPS modulu daim aktivdir. Naviqasiya, fitness tətbiqləri, AR tətbiqləri üçün uyğundur. SLC isə əksinə, GPS-i davamlı istifadə etmir və dəqiqliyi 500 metr və daha aşağıdır.
Region Monitoring müəyyən edilmiş coğrafi zonalara giriş və çıxışı izləyir. SLC-dən fərqli olaraq, tərtibatçı regionların sərhədlərini özü müyyən edir (radius 100 metrdən). Geofencing SLC-ni köməkçi mexanizm kimi istifadə edir — sistem əvvəlcə SLC vasitəsilə təxmini yeri müyyən edir, sonra zonaya giriş/çıxışı dəqiq müyyən etmək üçün GPS-i işə salır. Maksimum sayı izlənən regionlar — 20.
Visit Monitoring — iOS 8+ üçün ixtisaslaşmış xidmət, yerləri ziyarət etməyi (gəlmə və getmə) izləyir. O, istifadəçinin bir yerdə dayandığını və nə vaxt getdiyini müyyən etmək üçün SLC və digər siqnalların kombinasiyasından istifadə edir. Visit Monitoring SLC-dən daha enerjiyə qənaətlidir, çünki daha az hadisə yaradır və cihazda maşın öyrənməsindən istifadə edir.
| Xidmət | Dəqiqlik | Enerji sərfiyyatı | Fon |
|---|---|---|---|
| SLC | 500 m – 3 km | Çox aşağı | Bəli |
| Standart GPS | 10 m-ə qədər | Yüksək | İcazə tələb edir |
| Geofencing | 100 m-dən | Aşağı | Bəli |
| Visit Monitoring | 100 m-ə qədər | Çox aşağı | Bəli |
SLC Visit Monitoring nəzərə alınmasa, iOS-da geolokasiya əldə etməyin ən enerjiyə qənaətli üsuludur. Apple-a görə, SLC tipik istifadə ssenarisində saatda təxminən 0,1–0,5% batareya sərf edir, davamlı GPS izləmə isə saatda 5–10% sərf edə bilər. Qənaət GPS modulunun hər hadisədə koordinatları yoxlamaq üçün yalnız qısa müddətə işə düşməsi sayəsində əldə edilir.
iOS SLC-nin enerji sərfiyyatını batareya optimallaşdırması vasitəsilə idarə edir. Sistem tətbiqin SLC hadisələrini çox tez-tez emal etdiyini görsə (məsələn, cihaz qatarda hərəkət edir və tez-tez stansiya dəyişməsi çox hadisə yaradır), iOS müvəqqəti olaraq bildirişlərin tezliyini azalda bilər. Bu avtomatik mexanizmdir — tərtibatçı onu söndürə bilməz.
iOS-un hər bir böyük buraxılışı ilə Apple fonda geolokasiyaya giriş siyasətini sərtləşdirir. iOS 13-dən etibarən fonda yer istifadəsi üçün icazə sorğu dialoqu dəyişib: istifadəçi açıq şəkildə “Həmişə” (Always) seçməlidir, təkcə “Tətbiqdən istifadə edərkən” (While Using) yox. Always icazəsi olmadan SLC tətbiq fonda olduqda və ya sistem tərəfindən öldürüldükdə işləməyəcək.
Swift-də Significant Location Change-in tam tətbiqini nəzərdən keçirək. Nümunə CLLocationManager konfiqurasiyası, Always icazəsi sorğu, monitorinqin başladılması, hadisələrin emalı və sistem tərəfindən öldürüldükdən sonra tətbiqin yenidən işə salınması dəstəyini əhatə edir. Kod koordinatları emal etmək üçün async/await ilə müasir Swift və BGTaskScheduler vasitəsilə fon tapşırıqlarından istifadə edir.
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)")
}
}
Tətbiq sistem tərəfindən öldürülübsə, SLC yeni hadisə baş verdikdə onu avtomatik yenidən işə salacaq. AppDelegate-də UIApplication.LaunchOptionsKey.location vasitəsilə yer hadisəsi ilə işəsalma yoxlanışı əlavə etmək lazımdır. Yenidən işə salındıqdan sonra tətbiq CLLocationManager-i işə salmalı və monitorinqi davam etdirmək üçün startMonitoringSignificantLocationChanges()-i çağırmalıdır.
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-in düzgün istifadəsi funksionallıq və enerji səmərəliliyi arasında tarazlıq tələb edir. Apple fonda geolokasiyaya girişi ciddi şəkildə idarə edir və SLC-dən sui-istifadə edən və ya açıq ehtiyac olmadan istifadə edən tətbiqlər App Store-da dərc zamanı rədd edilmə riski daşıyır.
Info.plist-də əsaslandırma sətirləri əlavə etmək lazımdır: NSLocationAlwaysAndWhenInUseUsageDescription və NSLocationWhenInUseUsageDescription. Təsvir aydın şəkildə tətbiqin niyə fonda geolokasiyaya girişə ehtiyacı olduğunu izah etməlidir. App Review bu sətirləri oxuyur və əsaslandırma kifayət deyilsə və ya ifadələr qeyri-müyyəndirsə, tətbiqi rədd edə bilər. Nümunə: “Bu tətbiq SLC-dən sizin hərəkətiniz zamanı hava proqnozunu yeniləmək üçün istifadə edir.”
Hər SLC hadisəsində bahalı əməliyyatları (GPS yeri, şəbəkə sorğuları) işə salmayın. SLC nəqliyyatda hərəkət edərkən saatda onlarla hadisə yarada bilər. Debaunsing istifadə edin: son tam yeniləmənin vaxtını saxlayın və əvvəlki yeniləmədən 5–10 dəqiqədən az keçibsə, emalı atlayın. Bu batareyaya və şəbəkə trafikinə qənaət edəcək.
SLC hadisəsindən sonra uzunmüddətli emal üçün BGTaskScheduler istifadə edin. Tətbiq SLC hadisəsi aldıqda, BGProcessingTaskRequest və ya BGAppRefreshTaskRequest vasitəsilə fon tapşırığı planlaşdıra bilər. Bu, resurs tutumlu əməliyyatları (serverlə sinxronizasiya, marş rut təhlili) ən yaxın fon icra pəncərəsinə təxirə salmağa imkan verir, SLC-yə cavabın əsas axınını bloklamır.
Tez-tez verilən suallar
Significant Location Change (SLC) mobil stansiyalar əsasında cihazın böyük hərəkətlərini izləmək üçün enerjiyə qənaət edən iOS xidmətidir. Davamlı GPS izləmədən 90%- ə qədər az enerji sərf edir və yüksək dəqiqlik tələb etməyən tətbiqlər üçün uyğundur.
SLC dəqiqliyi mobil stansiyaların sıxlığından asılı olaraq 500 metrdən 3 kilometrə qədər dəyişir. Şəhər şəraitində dəqiqlik daha yüksəkdir (500 m-ə yaxın), kənd yerlərində — daha aşağı (bir neçə kilometrə qədər). SLC dəqiq koordinatları müyyən etmək üçün nəzərdə tutulmayıb — bu hərəkətlərin təxmini monitorinqi üçün resursdur.
Info.plist-də NSLocationAlwaysAndWhenInUseUsageDescription sətri əlavə etdikdən sonra CLLocationManager.requestAlwaysAuthorization()-i çağırın. iOS 13-dən etibarən istifadəçi sistem dialoqunda açıq şəkildə “Həmişə” (Always) seçməlidir. Bu icazə olmadan SLC fonda işləmir.
Bəli, SLC yaddaş çatışmazlığı səbəbindən sistem tərəfindən öldürülmüş tətbiqi yenidən işə sala bilər. İşəsalma zamanı didFinishLaunchingWithOptions metodunda UIApplication.LaunchOptionsKey.location-u yoxlayın və monitorinqi davam etdirmək üçün startMonitoringSignificantLocationChanges()-i çağırın.
SLC yalnız mobil stansiyalardan istifadə edir və GPS-i davamlı işə salmır, bu da batareyaya 90%- ə qədər qənaət verir. Dəqiqlik — 500 m-dən 3 km-ə qədər. Standard Location Service GPS, Wi-Fi və stansiyalardan istifadə edir, dəqiqlik 10 m-ə qədər, lakin daha çox enerji sərf edir. SLC fond monitorinqi üçün, GPS isə naviqasiya üçün uyğundur.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun