Android-Kotlin: Firebase Remote Config ile Force Update Kurulumu

Mert Melih Aytemur
Appcent
3 min readAug 29, 2023

--

Giriş

Mobil uygulamanızın kullanıcı tabanını en son özellikler, hata düzeltmeleri ve güvenlik güncellemeleriyle güncel tutmak son derece önemlidir. Ancak kullanıcılar uygulamalarını her zaman isteyerek güncellemezler. Bu da uyumluluk sorunlarına ve olası güvenlik açıklarına yol açabilir.

Bu zorluğun üstesinden gelmek için Firebase Remote Config devreye girer. Bu makalede, Kotlin kullanarak Android uygulamasında force update mekanizması uygulamak için Firebase Remote Config nasıl kullanacağımızı keşfedeceğiz.

Firebase Remote Config Nedir?

Firebase Uzaktan Yapılandırma, Firebase tarafından sağlanan bulut tabanlı bir hizmettir ve uygulamanızın davranışını ve görünümünü uygulama güncellemelerini yayınlamadan özelleştirmenizi sağlar.

Firebase konsolunda anahtar-değer çiftleri tanımlamanıza olanak tanır, uygulamanız bu değerleri uzaktan alabilir ve değişiklikleri buna göre uygulayabilir. Bu özellik, zorunlu uygulama güncellemelerini uygularken özellikle güçlü bir hale gelir.

Force Update Senaryoları

  1. Kritik Hata Düzeltmeleri: Uygulamanızda işlevselliği veya güvenliği etkileyen kritik bir hata keşfederseniz, kullanıcıları düzeltmeyi içeren en son sürüme zorlamak gerekebilir.
  2. Zorunlu Özellik Dağıtımları: Ara sıra, uygulamanın temel işlevselliği için gereken yeni özellikler ekleyebilirsiniz. Tutarlı bir kullanıcı deneyimi sağlamak için kullanıcıları güncellemeye ve bu özelliklere erişmeye zorlayabilirsiniz.
  3. Güvenlik Güncellemeleri: Zamanla güvenlik açıkları ortaya çıkabilir. Kullanıcıları güncellemeye zorlayarak potansiyel güvenlik tehditlerine karşı korunmalarını sağlayabilirsiniz.

Uygulama Adımları

1.Adım: Firebase Projesini Yapılandırma

Henüz yapmadıysanız Firebase projesi oluşturun. Android uygulamanızı projeye ekleyin ve Firebase’i uygulamanıza entegre etmek için kurulum talimatlarını izleyin.

2.Adım : Remote Config Parametreleri Girme

  1. Firebase Remote Config Ayarları için Firebase konsolunda remote config alanına gidin ve “android_force_update_required”, “android_force_update_required_version”, “android_force_update_store_url” gibi yeni parametreler oluşturun.
  2. Zorunlu bir güncelleme gerektiğinde “android_force_update_required_version” parametre değerini güncel versiyon olarak ayarlayın.
  3. Force update’i kapatmak için “android_force_update_required” değerini false olarak değiştirebilirsiniz.

3.Adım: Proje Üzerinde Firebase Remote Config Yapılandırması

  1. Uygulama düzeyindeki build.gradle dosyanıza Firebase Uzaktan Yapılandırma bağımlılığını ekleyin
implementation 'com.google.firebase:firebase-config-ktx:x-y-z'

2. Uygulama sınıfınızda veya ilgili bir etkinlikte Firebase Remote Config’i başlatın ve config değerlerini alın. Zorunlu bir güncelleme için kontrol edin: Öneri: Burda oluşturulan ForceUpdateChekcer sınıfını referans alabilirsiniz.

(Dagger-Hilt Kullanılmıştır)

class ForceUpdateChecker @Inject constructor() {
/**
* About [setDefaultsAsync]
* Provided default values for your parameters that act as fallbacks
* in case the actual remote values are not available due to network issues or if the parameters haven't been fetched yet.
* This helps ensure that your app doesn't break or behave unexpectedly if there's a delay in fetching remote configuration values.
*
* Set an interval for fetching config. (Default is 12 hours)
*
* Compare current and required versions.
* If current version is lower than required one, fetch store url and set to Force Update Data Model
* otherwise return null
*/
fun checkForceUpdateRequired(updateRequired: (result: ForceUpdateDataModel?) -> Unit) {
val remoteConfig = FirebaseRemoteConfig.getInstance()
remoteConfig.setDefaultsAsync(
mapOf(
KEY_UPDATE_REQUIRED to false,
KEY_REQUIRED_VERSION to BuildConfig.VERSION_NAME,
KEY_UPDATE_URL to "store_url"
)
).addOnCompleteListener {
remoteConfig.fetch(MINIMUM_FETCH_INTERVAL).addOnCompleteListener {
if (it.isSuccessful) {
remoteConfig.activate().addOnCompleteListener {
if (remoteConfig.getBoolean(KEY_UPDATE_REQUIRED)) {
val currentVersion = (BuildConfig.VERSION_NAME).replace(".", "").toInt()

val requiredVersion =
remoteConfig.getString(KEY_REQUIRED_VERSION).replace(".", "")
.toInt()

if (currentVersion < requiredVersion) {
updateRequired.invoke(
UpdateRequiredModel(
updateUrl = remoteConfig.getString(KEY_UPDATE_URL)
)
)
} else {
updateRequired.invoke(null)
}
}
}
} else {
updateRequired.invoke(null)
}
}
}
}

companion object {
const val KEY_UPDATE_REQUIRED = "android_force_update_required"
const val KEY_REQUIRED_VERSION = "android_force_update_required_version"
const val KEY_UPDATE_URL = "android_force_update_store_url"
const val MINIMUM_FETCH_INTERVAL = 60L
}
}

data class UpdateRequiredModel(
val updateUrl: String? = null
)

Ve gelen güncellemeleri kontrol etmek istediğiniz sınıfta ForceUpdateChecker’ı kullanın. Örneğin: Splash Ekranı

@Inject
lateinit var forceUpdateChecker: ForceUpdateChecker

private fun updateChecker() {
forceUpdateChecker.checkForceUpdateRequired { updateRequiredModel ->
if (updateRequiredModel != null) {
// pop up a non-cancellable dialog for giving information about new version
} else {
// do something
}
}
}

Sonuç

Firebase Remote Config, zorunlu uygulama güncellemelerini uygulamanın en son sürümünü içeren kritik düzeltmeler ve özelliklerle kullanıcıların sahip olmasını sağlayarak süreci basitleştirir. Bu makalede anlatılan adımları takip ederek, uygulamanızın kararlılığını, güvenliğini ve kullanıcı deneyimini artırabilir ve güncelleme süreci üzerinde kontrolünüzü koruyabilirsiniz.

Okuduğunuz için teşekkür ederim.

Referanslar

https://firebase.google.com/docs/remote-config/get-started?platform=android

--

--