Mobil uygulamada çevrimdışı çalışma: yerel veritabanı ve senkronizasyon
Kullanıcılar asansörde, metroda ya da zayıf çeken bir yerde uygulamanı açtığında boş bir ekran görmemeli. Çevrimdışı çalışabilen ("offline-first") bir uygulama hem daha hızlı hissettirir hem de daha az şikayet alır.
Temel fikir
Arayüz veriyi her zaman yerel veritabanından okur. Ağ katmanı arka planda yerel veritabanını sunucuyla eşitler. Böylece ekran ağ isteğini beklemez.
Arayüz <-> Yerel veritabanı <-> Senkronizasyon <-> Sunucu
Yerel depolama seçenekleri
- SQLite: Her iki platformda da yerleşik. Android'de Room, iOS'ta Core Data veya GRDB, Flutter'da sqflite/drift, React Native'de çeşitli SQLite kütüphaneleri üzerinden kullanılır.
- Anahtar-değer depoları: Ayarlar ve küçük veriler için (SharedPreferences, UserDefaults). Liste ve ilişkili veri için uygun değildir.
- Hazır senkronizasyon çözümleri: Bazı servisler yerel veritabanı + sunucu eşitlemesini hazır sunar. Hızlı başlarsın ama sağlayıcıya bağımlı olursun.
Yazma işlemleri: bekleyen kuyruk
Kullanıcı çevrimdışıyken bir kayıt eklediğinde:
- Kaydı yerel veritabanına
durum = bekliyorolarak yaz. - Arayüzde hemen göster (gerekirse küçük bir "gönderilecek" işaretiyle).
- Bağlantı geldiğinde kuyruktaki işlemleri sırayla sunucuya gönder.
- Sunucu onaylayınca durumu
gönderildiyap ve sunucunun verdiği kimliği kaydet.
Önemli: Her işleme istemcide bir benzersiz kimlik (UUID) ver ve sunucuya gönder. Bağlantı yarıda kopup istek tekrarlanırsa sunucu aynı kaydı iki kez oluşturmaz (idempotent istek).
Okuma işlemleri: neyin değiştiğini sor
Her açılışta bütün veriyi indirmek yerine sunucudan "şu zamandan sonra değişenleri" iste:
GET /api/notlar?degisti_sonra=2026-11-10T08:00:00Z
Silinen kayıtları da bildirebilmek için sunucuda kayıtları hemen silmek yerine silindi_at alanı tutmak işini kolaylaştırır.
Çakışmalar
Aynı kayıt iki cihazda çevrimdışıyken değiştirilirse ne olacak? Yaygın yaklaşımlar:
- Son yazan kazanır: En basiti. Çoğu uygulama için yeterli.
- Alan bazında birleştirme: Biri başlığı, diğeri açıklamayı değiştirdiyse ikisini de koru.
- Kullanıcıya sor: Belge düzenleme gibi önemli verilerde.
Hangisini seçeceğine baştan karar ver. Sonradan eklemek zordur.
Test etmeyi unutma
- Uçak modunda kayıt ekle, uygulamayı kapat, aç, interneti aç: kayıt gitti mi?
- İstek sırasında bağlantıyı kes: çift kayıt oluştu mu?
- Emülatörlerde ağ hızını yavaşlatma seçenekleriyle zayıf bağlantıyı dene.