İnternetsiz Çalışan Mobil Uygulamalar Nasıl Tasarlanır
Saha ekibi kullanan bir lojistik uygulamasında, depo içindeki bazı bölgelerde sinyal tamamen kesiliyordu. Uygulama internet bağlantısı olmadan hiçbir şey yapamayınca, teslimat kayıtları kağıda geri dönmüştü — dijitalleşmenin tam tersi bir durum. Offline destek, "olsa iyi olur" değil bazı uygulama türlerinde temel gerekliliktir.
Hangi uygulamalarda offline şart
Saha çalışanlarının kullandığı uygulamalar (bakım, teslimat, denetim), toplu taşıma bilet/harita uygulamaları, not alma ve üretkenlik araçları offline desteği olmadan pratik değer üretemez. Buna karşılık her zaman canlı fiyat gösteren bir yemek sipariş uygulamasında offline mod öncelik değil; kullanıcı zaten internet olmadan sipariş veremiyor. Offline desteğe yatırım yapmadan önce "bu uygulama bağlantısız kaldığında kullanıcı gerçekten bir şey yapmaya çalışır mı" sorusunu sormak gerekiyor.
Yerel veri saklama: doğru katmanı seçmek
Basit anahtar-değer verileri için SharedPreferences/UserDefaults yeterli ama yapılandırılmış veri için SQLite tabanlı çözümler (Room, Core Data, veya cross-platform projelerde SQLite wrapper'ları) daha sağlıklı. Büyük dosya veya medya önbellekleme için dosya sistemi kullanılmalı, veritabanına blob olarak gömülmemeli — bu performansı ciddi şekilde düşürüyor. Yerel veritabanı şeması tasarlanırken, sunucudaki şemayla birebir aynı olması gerekmiyor; senkronizasyon amaçlı ekstra alanlar (son değişiklik zamanı, senkron durumu gibi) eklemek gerekiyor.
Senkronizasyon çakışmaları: gerçek zorluk burada
Aynı kaydı hem cihaz offline'dayken hem sunucuda başka bir kullanıcı değiştirdiyse, hangisi kazanır? Basit senaryolarda "son yazan kazanır" (last-write-wins) kabul edilebilir ama kritik veri için bu veri kaybına yol açar. Daha sağlam bir yaklaşım: değişiklik zaman damgalarını karşılaştırıp çakışma tespit etmek, çakışma varsa kullanıcıya "hangi versiyonu tutmak istiyorsunuz" diye sormak veya alan bazlı birleştirme (field-level merge) yapmak. Stok takibi gibi sayısal alanlarda ise toplama/çıkarma tabanlı senkronizasyon (delta sync) çakışmaları büyük ölçüde ortadan kaldırıyor.
Kuyruk mantığı ve yeniden deneme
Offline'ken yapılan her işlem (yeni kayıt, güncelleme, silme) bir kuyruğa yazılmalı ve bağlantı geri geldiğinde sırayla sunucuya gönderilmeli. Gönderim başarısız olursa exponential backoff ile yeniden denemek, sunucuyu bombardımana tutmadan güvenilir senkronizasyon sağlıyor. Kullanıcıya da "3 kayıt senkronize edilmeyi bekliyor" gibi görünür bir durum göstermek, güven duygusu açısından önemli.
Test etmeyi unutmayın
Offline senaryoları geliştirme ortamında test etmek zor çünkü geliştiricinin bilgisayarı genelde her zaman bağlı. Uçak modu testleri, ağ hızını yapay olarak kısıtlayan araçlarla (network throttling) düzenli test yapmak, yayına çıkmadan önce gerçek sahadaki davranışı simüle etmenin en pratik yolu. Bu konuda Android ve iOS tarafında farklı network API'ları olduğu için her iki platformda ayrı ayrı test edilmesi gerekiyor.
Offline destek eklemek, geliştirme sürecine ekstra zaman katıyor ama doğru senaryoda bu yatırım kullanıcı memnuniyetine doğrudan yansıyor.
İlgili Yazılar
Projenize özel, şeffaf bir mobil uygulama fiyat teklifi için fiyat rehberimize göz atabilir veya bizimle iletişime geçebilirsiniz.
