Clock Sync (saat sinxronizasiyası) — cihazın daxili saat göstəricilərinin etalon vaxt mənbəyi ilə uyğunlaşdırılması prosesi. Mobil tətbiqlərdə dəqiq sinxronizasiya push bildirişlərinin, SSL/TLS sertifikatlarının, kriptoqrafik protokolların və analitikanın düzgün işləməsi üçün vacibdir. Google Security Blog (2024) məlumatına görə, mobil cihazlarda HTTPS bağlantılarının 30%-dən çoxundakı nasazlıqlar sistem vaxtının 5 saniyədən çox sinxronizasiyasız qalması nəticəsində baş verir.
Əsas məqamlar
Saat sinxronizasiyası (Clock Sync) — cihazın daxili saatının etalon UTC (Universal Coordinated Time) vaxtına uyğunlaşdırılması mexanizmidir. Sinxronizasiya olmadan mobil cihazdakı kvars generatoru tədricən səhv göstərir — temperaturdan və komponentlərin keyfiyyətindən asılı olaraq gündə 1–10 saniyə sürüşmə baş verir. Sinxronizasiya bu sürüşməni kompensasiya edərək dəqiq vaxtı xarici mənbələrdən əldə edir: internetdəki NTP serverləri, GPS peykləri və ya mobil baza stansiyaları. İdeal olaraq, cihaz 1 saniyə dəqiqlik qorumaq üçün hər 4–6 saatda sinxronizasiya edilməlidir.
Mobil cihazda iki növ saat var: avadanlıq (RTC, Real-Time Clock) ayrı batareyadan qidalanır — cihaz söndürüldükdə belə işləyir, və proqram (system time), əməliyyat sistemi tərəfindən idarə olunur. Cihaz yüklənərkən sistem vaxtı RTC-dən başladılır, sonra takt generatorunun kəsilmələri vasitəsilə saxlanılır. NTP sinxronizasiyası sistem vaxtını korrektə edir, bəzi hallarda isə düzəlişi RTC-yə də yazır. Android-də avadanlıq RTC-yə giriş məhduddur — tətbiqlər root hüquqları olmadan onu dəyişə bilməz.
Mobil tətbiqin işinin bir çox aspektləri dəqiq sistem vaxtından kritik dərəcədə asılıdır. SSL sertifikatları müəyyən etibarlılıq müddətinə malikdir: cihazda vaxt sertifikatın buraxılış tarixindən əvvəl və ya bitmə tarixindən sonra qurulubsa, HTTPS bağlantısı bloklanacaq. OAuth nişanları və JWT autentifikasiyası vaxt damğalarından istifadə edir — sinxronizasiyasızlıq səlahiyyətdən yanlış imtinaya səbəb olur. Push bildirişləri vaxta əsasən planlaşdırılır və saat sürüşərsə, istifadəçi bildirişləri yanlış vaxtda alır və ya heç almır.
Təhlükəsizlik də səhv vaxtdan əziyyət çəkir: vaxta əsaslanan şifrələmə (time-based OTP), səhv damğalı hadisə jurnalları, server tərəfində rate-limiting-in düzgün işləməməsi (server "gələcək" sorğuları bloklayır). OWASP Mobile Top 10 (2024) məlumatına görə, sistem vaxtına etibarsızlıq platformanın kifayət qədər təhlükəsiz olmaması kateqoriyasına daxildir. Tərtibatçılara həmişə serverdə vaxtı yoxlamaq tövsiyə olunur, yalnız müştəri saatına güvənmək yox. Fərq həddi aşarsa (tövsiyə olunan 5 saniyə), tətbiq sinxronizasiyaya qədər kritik əməliyyatları bloklamalıdır.
| Ssenari | Sinxronizasiyasızlığın effekti |
|---|---|
| HTTPS/TLS | Sertifikatlar müddəti bitmiş və ya etibarsız sayılır |
| OAuth 2.0 / JWT | Nişanlar vaxtı keçmiş kimi rədd edilir |
| Push bildirişləri | Bildirişlər yanlış vaxtda gəlir |
| Analitika | Səhv vaxt damğalı hadisələr hesabatları təhrif edir |
| Kriptoqrafiya | Time-based OTP serverlə uyğun gəlmir |
| Rate limiting | Server "gələcək" vaxtı olan sorğuları bloklayır |
Saat sinxronizasiyası üçün əsas protokollar — NTP və onun sadələşdirilmiş versiyası SNTP. NTP (RFC 5905) — server filtrləmə, sürüşmə analizi və PLL korreksiyası olan tam protokol. Serverlərdə və şəbəkə avadanlığında istifadə olunur. SNTP (RFC 4330) — müştəri cihazları üçün yüngül versiya, daimi sinxronizasiya tələb etmir. SNTP müştərisi sorğu göndərir, cavab alır və tarixçə analizi olmadan vaxtı təyin edir. Mobil cihazlarda məhz SNTP istifadə olunur — Android Google Time Service (GTS) time.google.com serverləri ilə SNTP vasitəsilə sinxronizasiya edir.
NTP/SNTP-dən başqa, mobil cihazlarda vaxt sinxronizasiyası GPS qəbuledicisi (ideal şəraitdə 10 ns dəqiqlik) və mobil şəbəkə (NITZ — Network Identity and Time Zone) vasitəsilə mümkündür. GPS maksimal dəqiqlik təmin edir, ancaq açıq havada işləyir və çox enerji sərf edir. NITZ mobil operator tərəfindən şəbəkəyə qeydiyyat zamanı avtomatik təmin edilir, lakin bütün operatorlar onu dəstəkləmir. Android bütün metodların kombinasiyasından istifadə edir: GTS (SNTP) prioritet, NITZ ehtiyat kimi və GPS yüksək dəqiqlik tələb edən tətbiqlər üçün.
Paylanmış sistemlərdə — server və müştəri müxtəlif cihazlarda olduqda — saat sinxronizasiyası fundamental məhdudiyyətlərlə üzləşir. Şəbəkə gecikməsi (latency) müştəridə dəqiq vaxtın birmənalı müəyyən edilməsini qeyri-mümkün edir: paket 200 ms gedibsə, sorğunun göndərilməsi və cavabın alınması anında serverdəki vaxt artıq fərqlidir. NTP bu problemi RTT ölçməsi və statistik emal vasitəsilə həll edir, lakin paylanmış tranzaksiyalar (məsələn, bank köçürmələri) üçün bu kifayət deyil — məntiqi saatlardan (Lamport damğaları) və ya vektor saatlardan istifadə olunur.
Fiziki saatlar (wall clock) — NTP vasitəsilə sinxronizasiya edilən real UTC vaxtı. Məntiqi saatlar — sistemdə hadisələrin sıra nömrələri, fiziki vaxta bağlı deyil. Paylanmış sistemlərdə hadisələrin sıralanması üçün tez-tez vektor saatlardan istifadə olunur: hər node klasterin bütün node-ları üçün sayğac vektorunu saxlayır. Mobil tətbiqlər üçün 1–5 saniyə dəqiqliklə fiziki sinxronizasiya kifayətdir — bu OAuth, SSL və push bildirişlərinin düzgün işləməsini təmin edir. Hadisələrin ciddi sıralanması tələb olunarsa (məsələn, real vaxt söhbətlərində), server səviyyəsində məntiqi sinxronizasiya əlavə edilir.
Saat sinxronizasiyasını Android tətbiqində bir neçə yolla tətbiq etmək olar. Ən sadəsi — REST API vasitəsilə server vaxtını əldə etmək: server cavabın gövdəsində və ya HTTP Date başlığında Unix Timestamp qaytarır. Bu yanaşma əlavə kitabxanalar tələb etmir və vaxtın serverlə uyğun olduğunu təmin edir. İkinci üsul — NTP serverinə birbaşa sorğu üçün SNTP müştərisindən istifadə. Üçüncü — Android Google Time Service-ə güvənmək, cihaz internetə qoşulduqda sistem vaxtını avtomatik sinxronizasiya edir.
Səlahiyyət və maliyyə əməliyyatları olan Android tətbiqlərində qarışıq yanaşma tövsiyə olunur: hər API sorğusunda server vaxtı ilə System.currentTimeMillis() arasındakı fərq saxlanılır. Bu fərq sistem saatının sinxronizasiya olunmasından asılı olmayaraq müştəridəki bütün vaxt hesablamalarına tətbiq olunur. Bu yanaşma clock skew correction adlanır və serverlə son məlum fərqi saxlayan sinif vasitəsilə tətbiq olunur. Əlavə olaraq, WorkManager vasitəsilə hər 4–6 saatda fon NTP sinxronizasiyası işə salına bilər.
// Saat sürüşməsinin korreksiyası
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
}
}
Android-də dövri fon vaxt sinxronizasiyası üçün WorkManager ilə PeriodicWorkRequest istifadə edin. Sinxronizasiya tapşırığı SNTP sorğusu və ya REST API çağırışı yerinə yetirir, server vaxtını alır və ClockSyncManager-i yeniləyir. PeriodicWorkRequest üçün minimum interval 15 dəqiqədir, lakin vaxt sinxronizasiyası üçün 4–6 saat kifayətdir. Sinxronizasiya zamanı şəbəkə vəziyyətini nəzərə alın — rouminqdə lazımsız sorğuların qarşısını almaq üçün NetworkType.CONNECTED istifadə edin. Sinxronizasiya uğursuz olarsa, əvvəlki korreksiyanı qoruyun — o, tədricən azalan dəqiqliklə etibarlı qalır.
Müasir mobil cihazlar vaxtı daxili xidmətlər vasitəsilə avtomatik sinxronizasiya edir. Android-də — Google Play Services-in bir hissəsi olan Google Time Service (GTS). iOS-da — əməliyyat sisteminə daxil edilmiş NTP müştərisi. Bu xidmətlər tətbiqlərdən asılı olmayaraq işləyir və əlavə konfiqurasiya tələb etmir. İstifadəçi avtomatik sinxronizasiyanı parametrlərdən söndürə bilər ki, bu da tətbiqlər üçün risk yaradır — məhz bu halda tərtibatçı öz sinxronizasiyasını tətbiq etməlidir. Avtosinxronizasiya statusunu Settings.Global.getInt(AUTO_TIME) vasitəsilə yoxlamaq və söndürüldükdə istifadəçini xəbərdar etmək tövsiyə olunur.
| Platforma | Sinxronizasiya xidməti | Protokol |
|---|---|---|
| Android | Google Time Service (GTS) | SNTP |
| iOS | Daxili NTP müştərisi | NTP |
| Mobil şəbəkə | NITZ (operator) | NITZ |
| GPS qəbuledicisi | Peyk siqnalı | GPS Atomic Time |
Yalnız avtomatik sinxronizasiyaya güvənmək təhlükəlidir — istifadəçi onu söndürə bilər və ya internet olmayan zonada ola bilər. Ən yaxşı təcrübə — hər API sorğusunda serverdən vaxt almaq və fərqi SharedPreferences və ya DataStore-da saxlamaq. Kritik əməliyyatlar (ödənişlər, səlahiyyət, sənəd imzalama) üçün icradan əvvəl mütləq isSyncValid() yoxlayın. Fərq həddi aşarsa — istifadəçiyə avtosinxronizasiyanı yandırmaq və ya sinxronizasiyanı gözləmək təklifi olan ekran göstərin. Oyun və əyləncə tətbiqləri üçün vaxtı işə salarkən serverdən almaq və hər saat yeniləmək kifayətdir.
Tez-tez verilən suallar
Saat sinxronizasiyası — cihazın sistem vaxtının etalon UTC-yə uyğunlaşdırılması prosesidir. NTP və ya SNTP protokolları vasitəsilə işləyir: cihaz serverə sorğu göndərir, şəbəkə gecikməsini ölçür və öz saatı üçün düzəliş hesablayır. Nəticə — şəbəkədən asılı olaraq 1–100 ms xəta ilə dəqiq vaxt.
Sinxronizasiya olmadan nasazlıqlar mümkündür: SSL sertifikatları HTTPS-ni bloklayır, OAuth nişanları müddəti keçmiş sayılır, push bildirişləri yanlış vaxtda gəlir, analitika səhv damğalar yazır. Kritik əməliyyatlar (ödənişlər, səlahiyyət) üçün 5 saniyədən çox sinxronizasiyasızlıq təhlükəsizlik təhdidi sayılır və əməliyyatı bloklamalıdır.
Əsas — NTP (1–50 ms, filtrasiya və PLL ilə) və SNTP (10–100 ms, sadələşdirilmiş). Əlavə: GPS (10 ns, ancaq açıq havada) və NITZ (mobil operator vasitəsilə, dəqiqlik ~1 saniyə). Android Google Time Service SNTP-də, iOS isə daxili NTP müştərisində işləyir.
time.google.com və ya pool.ntp.org ünvanına birbaşa SNTP sorğusu üçün Apache Commons Net kitabxanasından (NTPUDPClient sinfi) istifadə edin. Alternativ — API-nizin HTTP cavab başlıqlarından server vaxtını almaq. Daimi korreksiya üçün server və lokal vaxt arasındakı fərqi saxlayan ClockSyncManager tətbiq edin.
Clock skew correction tətbiq edin: hər API sorğusunda server vaxtı ilə System.currentTimeMillis() arasındakı fərqi saxlayın. Bu fərqi tətbiqin bütün vaxt əməliyyatlarında korreksiya üçün istifadə edin. Fərq 5 saniyəni aşarsa — kritik tranzaksiyaları bloklayın və istifadəçiyə parametrlərdə avtosinxronizasiyanı yandırmağı təklif edin.
Nəticə
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