Flutter’da Firebase Remote Config Kullanımı
Selamlar! Bir süredir üzerinde çalıştığım Flutter’da Firebase Remote Config kullanmakla ilgili bir yazı oluşturarak bilgimi sizinle paylaşmak istedim. Hazırsanız başlayalım 🔥
Hatırlatma
Bu makale boyunca benimle aynı Flutter ve paket sürümleri kullanmanızı tavsiye ederim. Bu sayede oluşabilecek potansiyel değişikliklerin önüne geçmiş olacağız. Ben Flutter 3.0.4 kullandım.
Kurulum
Her şeyden önce bir Firebase Projesi oluşturmak gerekiyor. Adım adım nasıl Firebase projesi oluşturacağınızı buradan öğrenebilirsiniz. Yeni Firebase Entegrasyonu ile ilgili Buğra’nın yazısını da okuyabilirsiniz.
Firebase Remote Config’den faydalanabilmek için öncelikle firebase_core (1.20.0) paketini kurmamız gerekiyor. Firebase’in Flutter projesine nasıl ekleneceğini Firebase’in resmi dokümantasyonundan öğrenebilirsiniz.
Firebase hazır mı? Harika! Sırada firebase_remote_config (2.0.13) paketini projeye dahil etmek var.
Remote Config’in Ayarlanması
İlk olarak Firebase Projemizi açıyoruz. Daha sonra soldaki menü üzerinden Engage > Remote Config butonuna basıyoruz.
Eğer mevcut projede daha önce hiç Remote Config’i kullanmadıysanız küçük bir tanıtım sayfası sizleri karşılayacak. Burada Create configuration butonuna basarak devam edebilirsiniz.
Configlerimiz genel olarak key ve value’dan oluşur. Şimdilik ana ekranda görünecek yazıyı belirleyen bir parametre oluşturacağız. key olarak "welcome_message"
, value olarak Hey there, welcome to the app!
değerlerini girebiliriz. Parametrelerimizin bir Data Type’ları var. Burada metin gireceğimiz için Data Type’ı String
olarak bıraktık. Save butonuna basarak devam edelim.
Eklenen ve güncellenen parametreler hemen yayınlanmaz. Bu sayede canlıda olan uygulamalara doğrudan değişiklikler yansımaz. Ekranın aşağısında mevcut config ve Draft’ta bekleyen değişiklikleri görebilirsiniz.
Değişikliklerin yayınlanmasına karar verdiğinizde Publish changes butonuna basarak anında yayına alabilirsiniz.
İlk Config’imizi yayınladık. Tebrikler 🎉 Şimdi uygulama tarafına dönelim.
Flutter Uygulamasında Remote Config Servisinin Hazırlanması
Uygulamamızda Firebase Remote Config işlerini yapabileceğimiz bir servise ihtiyacımız var. Bu servis Remote Config’e bağlı işleri daha düzenli ve tek bir yerde yapmamıza yardımcı olacak.
İlk olarak FirebaseRemoteConfigService
isimli bir sınıf oluşturalım. Bu sınıf içerisinde kullanacağımız FirebaseRemoteConfig
nesnesi için bir değişken oluşturalım.
Bunu uygulamanın her yerinde kullanacağımız için singleton yapmak faydalı olacaktır. Bunun için get_it, flutter_bloc, provider, flutter_riverpod paketlerinden de yardım alabilirsiniz. (Bu örneği karmaşıklaştırmamak için bu şekilde devam edeceğim.)
Kurduğumuz bu yapı sayesinde FirebaseRemoteConfigService
nesnesinden sadece bir tane oluşacak ve her seferinde aynı nesneyi geriye döndürecek.
Servisimizi genel hatlarıyla oluşturduk. Şimdi oluşturduğumuz config parametrelerinin keyleri için bir sınıf oluşturalım.
Bu yardımcı sınıf sayesinde config parametrelerimizin keylerine tek yerden ulaşabileceğiz.
Remote Config üzerinden Config Parametrelerine erişmek için iki yönteme başvurabiliriz.
Birinci yöntemde, FirebaseRemoteConfig
kendi içerisinde sunduğu get metotlarını aynı şekilde dışarıya açabiliriz.
İkinci yöntemde ise her bir parametreye özel getter oluşturmak.
Eğer çok fazla config parametreniz varsa ikinci yöntemde her parametre için bir getter oluşturduğumuzdan dolayı FirebaseRemoteConfigService
şişmeye başlayacak. Birinci yöntemde ise standart metotlar hep sabit kalacağı için sınıfımız bu şekilde şişmeyecek. Burada tercih sizin.
Remote Config Servisinin Ayarlanması
Firebase projemizi oluşturduk, Remote Config’i hazırladık, uygulamamıza dahil ettik ve yardımcı servisimizi yazdık. Son olarakFirebaseRemoteConfig
'in initialize edilmesi yani başlatılması gerek.
Initialization sürecinin ilk adımı Config Ayarlarını belirlemek.
fetchTimeout
, Remote Config sunucusundan bilgiler getirilirken beklenecek maksimum süreyi ifade eder. Varsayılan değeri 1 dakikadır.
minimumFetchInterval
, cachelenmiş config’in maksimum ömrünü ifade eder. Varsayılan değeri 12 saattir.
İkinci adımda default değerleri belirleriz.
Eğer aşağıdaki görselde olduğu gibi bir değişkeni Use in-app default olarak işaretlerseniz, mutlaka setDefaults()
altında değer atamalısınız. Default değerler sadece String
, int
/double
ve bool
olabilir.
Son adım ise config parametrelerini çekip aktive etmek. Bu aşamada debugPrint
ile konsola sonucu da basabilirsiniz.
Bu metodun public diğerlerinin private olmasının nedeni, gerektiği durumlarda tekrar güncel config parametrelerini alabilmek.
Şimdi tüm bu adımları bir metot altında toplayalım.
Artık Remote Config’imizi main()
altında initialize edebiliriz.
Remote Config Parametrelerinin Uygulama İçerisinde Kullanılması
Uygulama içerisinde tek yapmamız gereken oluşturduğumuz FirebaseRemoteConfigService
sınıfından yardım alarak parametreye senkron olarak erişmek.
İşte sonuç 🥳
Uygulama İçerisinde Güncel Config’i Fetch Etmek
Öncelikle uygulama içerisinde sık sık config’i kontrol edip güncellemek istiyorsanız yukarıda bahsettiğimiz setConfigSettings()
metodu içerisindeki minimumFetchInterval
değerini düşük tutmanız gerekiyor. Aksi durumda, bu süre dolmadığı sürece cachelenen config’i kullanmaya devam edecek.
HomePage
sayfamızı StatefulWidget
’a çevirelim.
Şimdi bir FloatingActionButton
ekleyelim ve onPressed
içerisinde configimizi fetch edip setState
ile sayfayı yenileyelim.
Daha önce fetchAndActivate()
metodumuzu public yapmamızın sebebinden bahsetmiştim.
Butonumuz ekrana geldiğine göre Firebase Console’a dönerek welcome_message
değerini değiştirebiliriz.
Şimdi tekrar uygulamaya dönelim ve eklediğimiz FloatingActionButton
’a tıklayalım.
Metin değişti 🤩
Sonuç
Firebase Remote Config, uygulama içerisindeki belirli kısımların uzaktan değiştirilebilmesine olanak sağlar. Bu kısımlar bir metin olabileceği gibi, JSON veya Boolean’da olabilir. Bu sayede uygulamanın rengini değiştirebilir, butonları gizleyebilir, UI değiştirebilir, spesifik özellikleri açıp kapatabilirsiniz. Her ne yapacak olursanız olun, adımlar aynı olacaktır.
Umarım yazı faydalı olmuştur 💙
Son olarak, Firebase Remote Config’i merak etmemi sağlayan Murat’a teşekkür ederim.
Aşağıdaki bağlantılardan benim ve Team Kraken’in sosyal medya hesaplarına ulaşabilirsiniz.