Significant Location Change (SLC) je služba iOS pro monitorování velkých přesunů zařízení, která upozorní aplikaci pouze při významných změnách zeměpisných souřadnic. Na rozdíl od sledování GPS v reálném čase SLC využívá základnové stanice mobilních sítí k určení polohy, což zajišťuje minimální spotřebu energie. Podle dokumentace Apple Developer, 2025 umožňuje Significant Location Change aplikaci přijímat aktualizace geopozice bez nepřetržitého provozu GPS, což šetří až 90% baterie ve srovnání s nepřetržitým sledováním.
Hlavní body
Significant Location Change (SLC) je energeticky účinná služba geolokace iOS vestavěná do frameworku Core Location. Je určena pro aplikace, které potřebují sledovat velké přesuny uživatele bez nepřetržitého používání modulu GPS. SLC se automaticky aktivuje při přechodu mezi základnovými stanicemi a upozorní aplikaci prostřednictvím delegáta CLLocationManagerDelegate metodou didUpdateLocations.
Na rozdíl od sledování na úrovni GPS (standardní startUpdatingLocation) SLC nevyžaduje nepřetržitou aktivitu procesoru a GPS čipu. iOS používá signály základnových stanic k určení přibližné polohy a spouští aplikaci pouze při detekci významného rozdílu souřadnic. To umožňuje aplikaci „spat“ mezi aktualizacemi, přičemž spotřebovává minimum energie.
SLC je dostupné na všech zařízeních s mobilním modemem od iOS 5. Na iPod Touch a iPad Wi-Fi Only služba není dostupná, protože pro určení souřadnic se používají právě základnové stanice. Core Location automaticky rozhoduje, které události považovat za významné — vývojář nemůže nakonfigurovat citlivost SLC ani určit minimální vzdálenost pro spouštěč.
SLC je ideální pro aplikace, které nepotřebují vysokou přesnost geopozice: sledovače počasí, doručovací služby, aplikace pro vyhledávání blízkých objektů, analýzu navštívených míst. SLC je také používáno systémem iOS pro aktivaci geozon (Geofencing) v režimu úspory energie. Navigační aplikace vyžadují přesnější GPS sledování.
Significant Location Change funguje na základě analýzy identifikátorů základnových stanic (Cell ID), které zařízení obdrží při připojení k síti. iOS udržuje databázi souřadnic stanic a může určit přibližnou polohu bez zapínání GPS. Když zařízení přejde k nové stanici, systém porovná novou a předchozí polohu a pokud je rozdíl významný, spustí aplikaci pro zpracování události.
Systém používá přístup založený na clusterech: geografický prostor je rozdělen na shluky určitého poloměru. SLC generuje událost pouze při překročení hranice shluku, nikoli při každém mikropohybu uvnitř něj. Tím se předchází lavinovitým voláním aplikace při pohybu v rámci jedné zóny pokrytí (např. v budově nebo čtvrti). Přesnost SLC se pohybuje od 500 metrů do několika kilometrů v závislosti na hustotě základnových stanic.
Když iOS detekuje významnou změnu, probudí aplikaci ze stavu pozadí (pokud není spuštěna) a předá událost delegátovi Core Location. Aplikace získá krátký čas na zpracování (přibližně 10–30 sekund času na pozadí) — během této doby musí zpracovat souřadnice a případně naplánovat přesnější aktualizaci prostřednictvím GPS.
SLC má výsadu probuzení aplikace ze stavu Suspended nebo Background. Pokud byla aplikace zabita systémem z důvodu nedostatku paměti, SLC ji znovu spustí (relaunch) na pozadí. K tomu musí být aplikace přihlášena k odběru UIApplication.LaunchOptionsKey.location v metodě didFinishLaunchingWithOptions. Po zpracování události může systém aplikaci znovu přepnout do stavu Suspended.
Spouštěče SLC jsou určeny výhradně systémem iOS — vývojář nemůže programově ovlivnit, jakou změnu souřadnic považovat za „významnou”. Existují však zdokumentované scénáře, při kterých SLC garantovaně generuje událost. Pochopení těchto spouštěčů pomáhá vývojáři navrhnout správné chování aplikace.
Cell tower change — hlavní spouštěč SLC. Když zařízení přepíná mezi základnovými stanicemi (při pohybu po městě, silnici), systém zkontroluje, zda se souřadnice mezi starou a novou stanicí dostatečně změnily. Pokud ano — je generována událost. V městských podmínkách s hustou sítí stanic může SLC fungovat každých 1–3 kilometry.
Pokud jakákoli jiná aplikace nebo systémová služba (např. „Najít iPhone”, navigace) zapne modul GPS, SLC může také obdržet aktualizaci přesných souřadnic. Toto je vedlejší efekt: GPS určí přesnou polohu a iOS ji předá všem aplikacím přihlášeným k SLC. Na tento spouštěč se však nelze spolehnout — není garantován.
Přestože SLC nepoužívá Wi-Fi přímo, změna sítě Wi-Fi může nepřímo způsobit událost, pokud zařízení obdrží nové souřadnice prostřednictvím Apple Location Service (určení polohy na základě databází Wi-Fi). iOS hashuje souřadnice Wi-Fi přístupových bodů a používá je k upřesnění polohy mezi změnami stanic.
| Spouštěč | Záruka | Zpoždění | Přesnost |
|---|---|---|---|
| Změna základnové stanice | Vysoká | 1–30 s | 500 m – 3 km |
| GPS jiných aplikací | Nízká | Okamžitě | Až 10 m |
| Změna Wi-Fi | Střední | Až 5 min | 100–500 m |
iOS poskytuje několik mechanismů pro získání geolokace, každý s vlastní přesností, spotřebou energie a scénáři použití. Significant Location Change zaujímá místo mezi hrubou aproximací podle stanic a přesným GPS sledováním a nabízí optimální rovnováhu pro aplikace, které nepotřebují vysokou přesnost v reálném čase.
Standard Location Service (startUpdatingLocation()) používá GPS, Wi-Fi a základnové stanice k maximálně přesnému určení souřadnic. Přesnost až 10 metrů, ale spotřeba energie je vysoká — modul GPS je neustále aktivní. Hodí se pro navigaci, fitness trackery, AR aplikace. SLC naopak nepoužívá GPS neustále a má přesnost 500 metrů a nižší.
Region Monitoring sleduje vstup a výstup z definovaných geografických zón. Na rozdíl od SLC vývojář sám určuje hranice regionů (poloměr od 100 metrů). Geofencing používá SLC jako pomocný mechanismus — systém nejprve určí přibližnou polohu pomocí SLC a poté zapne GPS pro přesné určení vstupu/výstupu ze zóny. Maximální počet sledovaných regionů — 20.
Visit Monitoring — specializovaná služba iOS 8+, která sleduje navštívení míst (příchod a odchod). Používá kombinaci SLC a dalších signálů k určení, kdy se uživatel zastavil na nějakém místě a kdy jej opustil. Visit Monitoring je energeticky úspornější než SLC, protože generuje méně událostí a používá strojové učení na zařízení.
| Služba | Přesnost | Spotřeba energie | Pozadí |
|---|---|---|---|
| SLC | 500 m – 3 km | Velmi nízká | Ano |
| Standardní GPS | Až 10 m | Vysoká | Vyžaduje oprávnění |
| Geofencing | Od 100 m | Nízká | Ano |
| Visit Monitoring | Až 100 m | Velmi nízká | Ano |
SLC je nejúspornější způsob získávání geolokace na iOS, nepočítáme-li Visit Monitoring. Podle Apple spotřebovává SLC přibližně 0,1–0,5% baterie za hodinu při typickém scénáři použití, zatímco nepřetržité GPS sledování může spotřebovávat 5–10% za hodinu. Úspory je dosaženo díky tomu, že se modul GPS zapíná jen na krátkou dobu pro ověření souřadnic při každé události.
iOS spravuje spotřebu energie SLC pomocí optimalizace baterie. Pokud systém zjistí, že aplikace zpracovává události SLC příliš často (např. zařízení se pohybuje vlakem a časté změny stanic generují mnoho událostí), může iOS dočasně snížit frekvenci oznámení. Jedná se o automatický mechanismus — vývojář jej nemůže vypnout.
S každým hlavním vydáním iOS Apple zpřísňuje politiku přístupu k geolokaci na pozadí. Počínaje iOS 13 se změnil dialog žádosti o oprávnění pro používání polohy na pozadí: uživatel musí výslovně zvolit „Always” (Vždy), nikoli pouze „While Using” (Během používání). Bez oprávnění Always nebude SLC fungovat, když je aplikace na pozadí nebo zabita systémem.
Podívejme se na plnou implementaci Significant Location Change v Swift. Příklad zahrnuje konfiguraci CLLocationManager, žádost o oprávnění Always, spuštění monitorování, zpracování událostí a podporu opětovného spuštění aplikace po zabití systémem. Kód používá moderní Swift s async/await pro zpracování souřadnic a úkoly na pozadí prostřednictvím 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)")
}
}
Pokud byla aplikace zabita systémem, SLC ji automaticky znovu spustí při výskytu nové události. V AppDelegate je třeba přidat kontrolu spuštění pomocí události polohy prostřednictvím UIApplication.LaunchOptionsKey.location. Po opětovném spuštění by měla aplikace inicializovat CLLocationManager a zavolat startMonitoringSignificantLocationChanges() pro pokračování v monitorování.
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
}
}
Správné použití Significant Location Change vyžaduje rovnováhu mezi funkčností a energetickou účinností. Apple přísně kontroluje přístup k geolokaci na pozadí a aplikace, které SLC zneužívají nebo používají bez jasné potřeby, riskují odmítnutí při publikování v App Store.
V Info.plist je třeba přidat zdůvodňující řetězce: NSLocationAlwaysAndWhenInUseUsageDescription a NSLocationWhenInUseUsageDescription. Popis by měl jasně vysvětlovat, proč aplikace potřebuje přístup k geolokaci na pozadí. App Review tyto řetězce čte a může aplikaci odmítnout, pokud je zdůvodnění nedostatečné nebo formulace nejasné. Příklad: „Tato aplikace používá SLC k aktualizaci předpovědi počasí během vašeho přesunu.”
Nespouštějte nákladné operace (lokalizace GPS, síťové požadavky) při každé události SLC. SLC může generovat desítky událostí za hodinu při pohybu dopravními prostředky. Používejte debounding: ukládejte čas poslední úplné aktualizace a přeskočte zpracování, pokud od předchozí aktualizace uplynulo méně než 5–10 minut. To ušetří baterii a síťový provoz.
Pro dlouhodobé zpracování po události SLC používejte BGTaskScheduler. Když aplikace obdrží událost SLC, může naplánovat úkol na pozadí prostřednictvím BGProcessingTaskRequest nebo BGAppRefreshTaskRequest. To umožňuje odložit operace náročné na zdroje (synchronizace se serverem, analýza trasy) na nejbližší okno provádění na pozadí, aniž by blokoval hlavní tok odpovědi na SLC.
Často kladené otázky
Significant Location Change (SLC) je energeticky účinná služba iOS pro monitorování velkých přesunů zařízení na základě základnových stanic. Spotřebuje až o 90% méně energie než nepřetržité GPS sledování a je vhodná pro aplikace, které nepotřebují vysokou přesnost geopozice.
Přesnost SLC se pohybuje od 500 metrů do 3 kilometrů v závislosti na hustotě základnových stanic. V městských podmínkách je přesnost vyšší (blíže k 500 m), na venkově — nižší (až několik kilometrů). SLC není určeno k přesnému určení souřadnic — je to prostředek pro hrubé monitorování přesunů.
Zavolejte CLLocationManager.requestAlwaysAuthorization() po přidání řetězce NSLocationAlwaysAndWhenInUseUsageDescription do Info.plist. Počínaje iOS 13 musí uživatel výslovně zvolit „Always” (Vždy) v systémovém dialogu. Bez tohoto oprávnění SLC nefunguje na pozadí.
Ano, SLC může znovu spustit aplikaci, pokud byla zabita systémem z důvodu nedostatku paměti. Při spuštění zkontrolujte UIApplication.LaunchOptionsKey.location v metodě didFinishLaunchingWithOptions a zavolejte startMonitoringSignificantLocationChanges() pro pokračování v monitorování.
SLC používá pouze základnové stanice a nezapíná GPS neustále, což přináší úspory baterie až 90%. Přesnost — od 500 m do 3 km. Standard Location Service používá GPS, Wi-Fi a stanice, přesnost až 10 m, ale spotřebovává výrazně více energie. SLC je vhodné pro monitorování na pozadí, GPS — pro navigaci.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také