๐Ÿ’ป ๊ฐœ๋ฐœ์ฐจ๊ธฐ ๐Ÿฅ‹ feat.Android

๐Ÿ›  ์‚ฌ์šฉ์ž๋“ค์ด ์•ฑ์„ ์ž ์‹œ ๋ชป ์“ฐ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‚˜? - Firebase Remote Config ๋ณธ๋ฌธ

Development/Android

๐Ÿ›  ์‚ฌ์šฉ์ž๋“ค์ด ์•ฑ์„ ์ž ์‹œ ๋ชป ์“ฐ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‚˜? - Firebase Remote Config

Android_DevKick 2022. 9. 18. 01:05

์˜ค๋Š˜์€ ํŒŒ์ด์–ด๋ฒ ์ด์Šค์˜ remote config๋ฅผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

ํ•„์ž๋Š” ์•ฑ์„ ๊ผญ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ์— ์ด ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

์ผ๋‹จ Firebase์˜ Remote Config๋ž€ ์•ฑ์—์„œ ๋ณ„๋„์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ์•ฑ์˜ ๋™์ž‘์ด๋‚˜ ๋ชจ์–‘์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์ด๋‹ค.

๋งŒ์•ฝ ํ•„์ž์™€ ๊ฐ™์€ ๋ฒ„์ „ ์ฒดํฌ๋ฅผ ํ•˜์—ฌ ์•ฑ์„ ๊ฐ•์ œ ์—…๋ฐ์ดํŠธํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋Š” ์ „์ œํ•˜์— ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ๋‹ค.

์ผ๋‹จ firebase์™€ ๋‚ด ์•ฑ์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ์ „์ œํ•˜์— ์ง„ํ–‰ํ•˜๊ฒ ๋‹ค.

(์ถ”ํ›„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž‘์„ฑํ•  ์˜ˆ์ •)

 

1. gradle์— implementation ์‹œํ‚จ๋‹ค.

implementation 'com.google.firebase:firebase-core:21.1.0'
implementation 'com.google.firebase:firebase-config-ktx:21.1.1'

 

2. Firebase Remote config instance ํ˜ธ์ถœํ•œ๋‹ค.

val firebaseRemoteConfig = FirebaseRemoteConfig.getInstance()

 

3. listener๋ฅผ ๋‹จ๋‹ค.

firebaseRemoteConfig.fetch(0/*๋ช‡์ดˆ์— ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•  ๊ฒƒ์ธ์ง€.*/).addOnCompleteListener { task ->
    if (task.isSuccessful) {
        firebaseRemoteConfig.fetchAndActivate()
        val nowVersion = funGetAppVersion() // Version from gradle(app)
        val firebaseVersion = firebaseRemoteConfig.getString("version") // Version from firebase (firebase ์—์„œ ์„ค์ •ํ•œ key ๋ฅผ ๊ฐ€์ ธ์˜ด)
        val firebaseUpdate = firebaseRemoteConfig.getString("isUpdate") // from firebase (firebase ์—์„œ ์„ค์ •ํ•œ key ๋ฅผ ๊ฐ€์ ธ์˜ด)
     
        if (nowVersion == firebaseVersion || firebaseVersion.isBlank() || firebaseUpdate != "update") {
            launchApp()
            return@addOnCompleteListener
        } else if (nowVersion != firebaseVersion && firebaseUpdate == "true") { 
            // ์•ฑ ๋ฒ„์ „์ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ๋„๊ณ , ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์ˆ˜๋ฉด ํ”Œ๋ ˆ์ด์Šคํ† ์–ด๋กœ ์ด๋™
            openGoPlayStoreDialog()
            return@addOnCompleteListener
        }
    } else {
        // remote config ํ˜ธ์ถœ์ด ์‹คํŒจ ํ–ˆ์„ ๋•Œ์—๋„ ์‹คํ–‰์€ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค.
        launchApp()
    }
}
โ€‹
private fun funGetAppVersion(): String { 
        // gradle(app)์—์„œ ์„ค์ •ํ•œ versionName ์ฝ์–ด์˜ค๋Š” ๊ฒƒ
        val packageManager = this.packageManager
        return packageManager.getPackageInfo(
            this.packageName, PackageManager.GET_ACTIVITIES
        ).versionName
    }

 

4. firebase remote config์— ๋“ค์–ด๊ฐ€์„œ ์œ„์— ์„ค์ •ํ•œ key ๊ฐ’์„ ์„ธํŒ…ํ•ด์ค€๋‹ค.

Firebase Remote Config | Customize your app on the fly

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์„ค์ •์ด ์•ฑ์„ ๊ฐ•์ œ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

๊ฐ„๋‹จํ•˜์ง€๋งŒ ์ฒ˜์Œ์— ํ–ˆ์„ ๋•Œ key ๊ฐ’์„ ๋‹ค๋ฅด๊ฒŒ ์ ์–ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์•˜๊ณ 

์ด์ œ ๊ฐ•์ œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ๊ฑฐํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์—์„œ ๊นœ๋นกํ•˜๊ณ  ์ œ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉด ํฐ ๋‚ญํŒจ๋ฅผ ๋ณด๊ธฐ์— ๋ฐฐํฌ์™€ ์‹ฌ์‚ฌ, ๊ฐ•์ œ ์—…๋ฐ์ดํŠธ ์ œ๊ฑฐ๋ฅผ ํ•  ๋•Œ ์‹ ๊ฒฝ์„ ์ž˜ ์จ์ค˜์•ผํ•œ๋‹ค.