Significant Location Change — co to je, spouštěče a mechanismus fungování

Autor: IT Sectr Publikováno: 2026-03-28 Doba čtení: 10 min

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

  • SLC — monitorování významných změn polohy na základě základnových stanic
  • Spotřeba energie — až 90% úspory baterie ve srovnání s nepřetržitým GPS sledováním
  • Spouštěče — změna základnové stanice, překročení hranic clusterů, zapnutí GPS
  • Omezení — minimální vzdálenost aktualizace ~500 metrů, přesnost až jeden kilometr
  • iOS 13+ — přidáno oprávnění Always a omezení pro spuštění na pozadí

Co je Significant Location Change

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ěč.

Pro jaké aplikace je SLC vhodné

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í.

Jak funguje Significant Location Change

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.

Spouštění aplikace z pozadí

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 Significant Location Change

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.

Změna základnové stanice

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.

Zapnutí GPS jinými aplikacemi

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řechod mezi sítěmi Wi-Fi

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árukaZpožděníPřesnost
Změna základnové staniceVysoká1–30 s500 m – 3 km
GPS jiných aplikacíNízkáOkamžitěAž 10 m
Změna Wi-FiStředníAž 5 min100–500 m

SLC vs ostatní služby geolokace iOS

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

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 (Geofencing)

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

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žbaPřesnostSpotřeba energiePozadí
SLC500 m – 3 kmVelmi nízkáAno
Standardní GPSAž 10 mVysokáVyžaduje oprávnění
GeofencingOd 100 mNízkáAno
Visit MonitoringAž 100 mVelmi nízkáAno

Spotřeba energie a baterie

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.

  • SLC — 0,1–0,5% baterie za hodinu; GPS — 5–10% za hodinu při nepřetržitém provozu
  • iOS 13+ — vyžaduje výslovné oprávnění Always pro SLC na pozadí
  • Optimalizace — iOS automaticky sníží frekvenci SLC při aktivním pohybu
  • Dávkové zpracování — několik událostí SLC může být sloučeno do jednoho oznámení

Implementace v Swift

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.

swift
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)")
    }
}

Zpracování opětovného spuštění aplikace

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í.

swift
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
    }
}

Nejlepší postupy

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ždy vysvětlujte potřebu SLC

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.”

Zpracovávejte pouze potřebné události

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.

Kombinujte s BGTaskScheduler

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.

  • Info.plist — povinné zdůvodňující řetězce pro přístup k geolokaci na pozadí
  • Debounding — nezpracovávejte události častěji než 1× za 5–10 minut
  • BGTaskScheduler — plánujte úkoly na pozadí po události SLC
  • Oprávnění Always — žádejte pouze při skutečné potřebě
  • pausesLocationUpdatesAutomatically — zapněte pro automatickou pauzu GPS

Často kladené otázky

Co je Significant Location Change v iOS?

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.

Jaká je přesnost Significant Location Change?

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ů.

Jak získat oprávnění Always pro SLC?

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í.

Může SLC znovu spustit zabitou aplikaci?

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í.

Čím se SLC liší od Standard Location Service?

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í

  • Significant Location Change — energeticky účinné monitorování velkých přesunů na iOS
  • Mechanismus — určení polohy na základě základnových stanic bez nepřetržitého GPS
  • Přesnost — 500 m – 3 km v závislosti na hustotě mobilní infrastruktury
  • Spouštěče — změna stanice, zapnutí GPS jinými aplikacemi, změna Wi-Fi
  • Oprávnění — iOS 13+ vyžaduje Always pro práci SLC na pozadí
  • Spotřeba energie — 0,1–0,5% za hodinu oproti 5–10% pro nepřetržité GPS
  • Nejlepší postup — debounding událostí, BGTaskScheduler pro dlouhodobé zpracování

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í.

Prodiskutovat projekt

Přečtěte si také