Flutter’da Firebase Remote Config Kullanımı

Berat Göktuğ Özdemir
Team Kraken
Published in
5 min readAug 3, 2022

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.

--

--