Synchronizace hodin v aplikacích — podstata, protokoly a implementace

Autor: IT Sectr Publikováno: 2026-07-14 Doba čtení: 9 min

Clock Sync (synchronizace hodin) — proces slaďování údajů vnitřních hodin zařízení s referenčním zdrojem času. V mobilních aplikacích je přesná synchronizace kritická pro správnou funkci push notifikací, SSL/TLS certifikátů, kryptografických protokolů a analýzy. Podle Google Security Blog (2024) je více než 30 % selhání HTTPS připojení na mobilních zařízeních způsobeno desynchronizací systémového času o více než 5 sekund.

Hlavní body

  • Clock Sync — slaďování hodin zařízení s referenčním UTC pomocí protokolů NTP, SNTP nebo GPS
  • Kritičnost — desynchronizace o více než 5 sekund narušuje činnost SSL, push notifikací, OAuth tokenů a logů
  • Hlavní protokoly — NTP (přesnost 1–50 ms) a SNTP (zjednodušená verze, 10–100 ms)
  • Synchronizace Android — vestavěná časová služba Google (GTS) synchronizuje přes SNTP se servery Google
  • Programová korekce — pro aplikace je kritické porovnávat čas se serverem, nikoli spoléhat na systémový čas zařízení

Co je synchronizace hodin?

Synchronizace hodin (Clock Sync) — je mechanismus přizpůsobení vnitřních hodin zařízení referenčnímu času UTC (Universal Coordinated Time). Bez synchronizace se křemíkový oscilátor v mobilním zařízení postupně rozchází — odchylka činí 1–10 sekund denně v závislosti na teplotě a kvalitě součástek. Synchronizace tuto odchylku kompenzuje získáním přesného času z externích zdrojů: NTP serverů na internetu, GPS satelitů nebo mobilních základnových stanic. Ideálně by se zařízení mělo synchronizovat každé 4–6 hodin pro udržení přesnosti v rozmezí 1 sekundy.

Hardwarové a softwarové hodiny

V mobilním zařízení existují dva typy hodin: hardwarové (RTC, Real-Time Clock) s odděleným napájením z baterie — fungují i při vypnutém zařízení, a softwarové (system time) spravované operačním systémem. Při spuštění zařízení je systémový čas inicializován z RTC a poté udržován pomocí přerušení generátoru hodinového signálu. Synchronizace NTP koriguje systémový čas a v některých případech zapisuje korekci i do RTC. V Androidu je přístup k hardwarovému RTC omezen — aplikace jej nemohou měnit bez root oprávnění.

Proč je potřeba synchronizace času v mobilních aplikacích

Mnoho aspektů fungování mobilní aplikace kriticky závisí na přesném systémovém čase. SSL certifikáty mají dobu platnosti: pokud je na zařízení čas nastaven dříve než datum vydání certifikátu nebo později než datum jeho vypršení, bude HTTPS připojení zablokováno. OAuth tokeny a JWT autentizace používají časová razítka pro kontrolu platnosti — desynchronizace vede k falešnému odmítání autorizace. Push notifikace jsou plánovány podle času, a pokud se hodiny rozcházejí, uživatel dostává notifikace v nesprávnou dobu nebo je nedostává vůbec.

Důsledky desynchronizace

Bezpečnost aplikací také trpí nesprávným časem: časově založené šifrování (time-based OTP), protokoly událostí s nesprávnými časovými razítky, nesprávná funkce rate-limiting na straně serveru (server blokuje „budoucí“ požadavky). Podle OWASP Mobile Top 10 (2024) spadá nedůvěra k systémovému času do kategorie nedostatečného zabezpečení platformy. Vývojářům se doporučuje vždy kontrolovat čas na serveru, nikoli spoléhat výhradně na hodiny klienta. Pokud rozdíl překročí práh (doporučeno 5 sekund), aplikace by měla blokovat kritické operace až do synchronizace.

ScénářEfekt desynchronizace
HTTPS/TLSCertifikáty jsou považovány za prošlé nebo neplatné
OAuth 2.0 / JWTTokeny jsou odmítány jako prošlé
Push notifikaceNotifikace přicházejí v nesprávnou dobu
AnalytikaUdálosti s nesprávnými časovými razítky zkreslují zprávy
KryptografieTime-based OTP nesouhlasí se serverem
Rate limitingServer blokuje požadavky s „budoucím“ časem

Synchronizační protokoly: NTP a SNTP

Hlavní protokoly pro synchronizaci hodin — NTP a jeho zjednodušená verze SNTP. NTP (RFC 5905) — plný protokol s filtrováním serverů, analýzou odchylky a korekcí PLL. Používá se na serverech a síťových zařízeních. SNTP (RFC 4330) — odlehčená verze pro klientská zařízení, nevyžadující nepřetržitou synchronizaci. SNTP klient odešle požadavek, obdrží odpověď a nastaví čas bez analýzy historie. Na mobilních zařízeních se používá právě SNTP — vestavěná služba Android Google Time Service (GTS) synchronizuje přes SNTP se servery time.google.com.

Další metody synchronizace

Kromě NTP/SNTP je synchronizace času na mobilních zařízeních možná přes GPS přijímač (přesnost až 10 ns v ideálních podmínkách) a mobilní síť (přes NITZ — Network Identity and Time Zone). GPS poskytuje maximální přesnost, ale funguje pouze na otevřeném prostranství a spotřebovává mnoho energie. NITZ je poskytován mobilním operátorem automaticky při registraci v síti, ale ne všichni operátoři jej podporují. Android používá kombinaci všech metod: GTS (SNTP) jako prioritu, NITZ jako zálohu a GPS pro aplikace vyžadující vysokou přesnost.

Problémy synchronizace v distribuovaných systémech

V distribuovaných systémech — když jsou server a klient na různých zařízeních — synchronizace hodin naráží na zásadní omezení. Zpoždění sítě (latence) znemožňuje jednoznačné určení přesného času na klientovi: pokud paket putoval 200 ms, čas na serveru v okamžiku odeslání požadavku a přijetí odpovědi je již jiný. NTP řeší tento problém měřením RTT a statistickým zpracováním, ale pro distribuované transakce (např. bankovní převody) to nestačí — používají se logické hodiny (Lamportova razítka) nebo vektorové hodiny.

Fyzické vs. logické hodiny

Fyzické hodiny (wall clock) — reálný čas UTC, synchronizovaný přes NTP. Logické hodiny — pořadová čísla událostí v systému, nezávislá na fyzickém čase. V distribuovaných systémech se pro řazení událostí často používají vektorové hodiny: každý uzel ukládá vektor čítačů pro všechny uzly clusteru. Pro mobilní aplikace stačí fyzická synchronizace s přesností 1–5 sekund — zajišťuje správnou funkci OAuth, SSL a push notifikací. Pokud je vyžadováno striktní řazení událostí (např. v chatech v reálném čase), přidává se logická synchronizace na úrovni serveru.

Implementace synchronizace hodin v Androidu

Implementovat synchronizaci hodin v aplikaci pro Android lze několika způsoby. Nejjednodušší — získat čas serveru pomocí REST API: server vrací Unix Timestamp v těle odpovědi nebo v HTTP hlavičce Date. Tento přístup nevyžaduje další knihovny a zaručuje, že čas souhlasí se serverem. Druhý způsob — použít SNTP klienta pro přímý dotaz na NTP server. Třetí — spoléhat na Android Google Time Service, který automaticky synchronizuje systémový čas, pokud je zařízení připojeno k internetu.

Porovnání přístupů pro Android

V aplikacích pro Android s autorizací a finančními operacemi se doporučuje kombinovaný přístup: při každém požadavku na API se ukládá rozdíl mezi časem serveru a System.currentTimeMillis(). Tento rozdíl se aplikuje na všechny časové výpočty na klientovi, bez ohledu na to, zda jsou systémové hodiny synchronizovány. Tento přístup se nazývá clock skew correction a je implementován pomocí třídy, která ukládá poslední známý rozdíl se serverem. Dále lze spouštět synchronizaci NTP na pozadí každé 4–6 hodin pomocí WorkManageru.

kotlin
// Korekce odchylky hodin
class ClockSyncManager {
    private var serverTimeDiff: Long = 0 // serverTime - deviceTime (ms)

    fun updateServerTime(serverTimestampMs: Long) {
        serverTimeDiff = serverTimestampMs - System.currentTimeMillis()
    }

    fun getCorrectedTime(): Long {
        return System.currentTimeMillis() + serverTimeDiff
    }

    fun isSyncValid(maxDiffMs: Long = 5000): Boolean {
        return Math.abs(serverTimeDiff) < maxDiffMs
    }
}

Synchronizace na pozadí pomocí WorkManageru

Pro periodickou synchronizaci času na pozadí na Androidu použijte WorkManager s PeriodicWorkRequest. Úloha synchronizace provede SNTP dotaz nebo volání REST API, získá čas serveru a aktualizuje ClockSyncManager. Minimální interval pro PeriodicWorkRequest je 15 minut, ale pro synchronizaci času stačí 4–6 hodin. Při synchronizaci berte v úvahu stav sítě — použijte NetworkType.CONNECTED k zabránění zbytečným požadavkům v roamingu. Pokud synchronizace selže, ponechte předchozí korekci — zůstává platná s postupně klesající přesností.

Automatická synchronizace času na zařízeních

Moderní mobilní zařízení synchronizují čas automaticky prostřednictvím vestavěných služeb. V Androidu — Google Time Service (GTS), součást Google Play Services. V iOS — NTP klient integrovaný v operačním systému. Tyto služby fungují nezávisle na aplikacích a nevyžadují další konfiguraci. Uživatel může automatickou synchronizaci vypnout v nastavení, což vytváří riziko pro aplikace — právě v tomto případě musí vývojář implementovat vlastní synchronizaci. Doporučuje se kontrolovat stav automatické synchronizace přes Settings.Global.getInt(AUTO_TIME) a upozornit uživatele, když je vypnutá.

PlatformaSynchronizační službaProtokol
AndroidGoogle Time Service (GTS)SNTP
iOSVestavěný NTP klientNTP
Mobilní síťNITZ (operátor)NITZ
GPS přijímačSatelitní signálGPS Atomic Time

Doporučení pro vývojáře

Spoléhat se výhradně na automatickou synchronizaci je riskantní — uživatel ji může vypnout nebo se nacházet v zóně bez internetu. Nejlepší praxe — získávat čas ze serveru při každém požadavku API a ukládat desynchronizaci do SharedPreferences nebo DataStore. Pro kritické operace (platby, autorizace, podepisování dokumentů) vždy kontrolujte isSyncValid() před provedením. Pokud desynchronizace překročí práh — zobrazte uživateli obrazovku s návrhem zapnout automatickou synchronizaci nebo počkat na synchronizaci. Pro hry a zábavní aplikace stačí získat čas ze serveru při spuštění a aktualizovat jej každou hodinu.

Často kladené otázky

Co je synchronizace hodin a jak funguje?

Synchronizace hodin — je proces přizpůsobení systémového času zařízení referenčnímu UTC. Funguje přes protokoly NTP nebo SNTP: zařízení odešle požadavek na server, změří zpoždění sítě a vypočítá korekci pro své hodiny. Výsledkem je přesný čas s chybou 1–100 ms v závislosti na síti.

Proč synchronizovat čas v mobilních aplikacích?

Bez synchronizace jsou možné poruchy: SSL certifikáty blokují HTTPS, OAuth tokeny jsou považovány za prošlé, push notifikace přicházejí v nesprávnou dobu, analytika zaznamenává nesprávná razítka. Pro kritické operace (platby, autorizace) je desynchronizace o více než 5 sekund považována za bezpečnostní hrozbu a měla by operaci blokovat.

Jaké protokoly se používají pro synchronizaci?

Hlavní — NTP (přesnost 1–50 ms, s filtrováním a PLL) a SNTP (10–100 ms, zjednodušený). Doplňkově: GPS (10 ns, ale pouze venku) a NITZ (přes mobilního operátora, přesnost ~1 sekunda). Android používá Google Time Service na SNTP, iOS — vestavěný NTP klient.

Jak synchronizovat čas přes NTP v Androidu?

Použijte knihovnu Apache Commons Net (třída NTPUDPClient) pro přímý SNTP dotaz na time.google.com nebo pool.ntp.org. Alternativou je získat čas serveru z HTTP hlaviček odpovědi vašeho API. Pro trvalou korekci implementujte ClockSyncManager, který ukládá rozdíl mezi časem serveru a lokálním časem.

Co dělat, když se čas na zařízení liší od serveru?

Implementujte clock skew correction: při každém požadavku API ukládejte rozdíl mezi časem serveru a System.currentTimeMillis(). Použijte tento rozdíl pro korekci času ve všech operacích aplikace. Pokud rozdíl přesáhne 5 sekund — blokujte kritické transakce a navrhněte uživateli zapnout automatickou synchronizaci v nastavení.

Shrnutí

  • Clock Sync — proces slaďování systémových hodin s referenčním časem UTC přes NTP, SNTP, GPS nebo mobilní síť
  • Kritičnost — desynchronizace o více než 5 sekund narušuje SSL/TLS, OAuth, push notifikace, analytiku a kryptografii
  • Hlavní protokoly — NTP (s korekcí PLL a filtrováním, přesnost 1–50 ms) a SNTP (zjednodušený, přesnost 10–100 ms)
  • Implementace v Androidu — přes Google Time Service vestavěně, přes Apache Commons Net nebo REST API programově; WorkManager pro synchronizaci na pozadí
  • Clock skew correction — povinná praxe: ukládejte rozdíl serverového a lokálního času, korigujte všechny výpočty na klientovi
  • Distribuované systémy — pro striktní řazení událostí se navíc používají logické hodiny (Lamport, vektorové)
  • Doporučení — kontrolujte stav AUTO_TIME v Androidu, upozorněte uživatele při vypnutí automatické synchronizace a blokujte operace při desynchronizaci > 5 sekund

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é