본문 바로가기
Development/Android

[Android] Firebase - 4. Remote Config 사용해보기

by du.it.ddu 2020. 12. 10.
반응형

안드로이드 앱을 개발하다보면 원격에서 어떤 값이나 데이터가 필요한 경우가 있다.


앱의 버전을 체크해서 업데이트 알림을 준다거나 혹은 어떤 공지나 이벤트 등을 발행하여 앱에서 다이얼로그를 띄우는 등 다양한 니즈가 있다.

하지만 별도의 서버를 구축하기엔 너무 과할수도 있고, 서버 개발이 쉽지 않은것도 사실이다.

이럴때 Firebase의 "Remote Config"를 활용하면 편리할 수 있다.


1. Firebase에서 Remote Config 설정

Firebase 콘솔로 이동하여, 좌측의 메뉴 중 "성장" 탭에 있는 "Remote Config"를 선택한다.

그러면 위와 같은 화면을 볼 수 있을 것이다.
"매개변수 추가"에 본인이 원하는 변수의 키와 값을 넣어주면 된다.

이 예제에서는 앱의 버전을 체크하고 업데이트가 필요함을 알리는 용도로 사용해보도록 하겠다.


2. Remote Config에 매개변수 추가하기

위와 같이 매개변수를 추가하고, 상단의 "변경사항 게시" 를 클릭해주면 된다.


3. Android에서 Remote Config 사용하기

firebase.google.com/docs/remote-config/use-config-android?hl=ko

 

Android에서 Firebase 원격 구성 시작하기

Firebase 원격 구성으로 클라우드에서 앱의 매개변수를 정의하고 값을 업데이트하면 앱 업데이트를 배포하지 않고도 앱의 모양과 동작을 수정할 수 있습니다. 이 가이드에서는 시작하는 단계를

firebase.google.com

항상 권장하지만, 공식 문서를 참고하는 것은 아주 좋은 방법이다.

plugins {
   ...
}

android {
    ...
}

dependencies {
    ...
    
    implementation platform('com.google.firebase:firebase-bom:26.1.1')
    implementation 'com.google.firebase:firebase-config-ktx'
    
    ...

}

우선 앱 레벨의 build.gradle에 "com.google.firebase:firebase-config-ktx" 를 dependencies에 추가한다.

class MainActivity : AppCompatActivity() {
    ...
    private lateinit var remoteConfig: FirebaseRemoteConfig

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ...
        
        remoteConfig = Firebase.remoteConfig

        val configSettings = remoteConfigSettings {
            minimumFetchIntervalInSeconds = 3600
        }

        remoteConfig.setConfigSettingsAsync(configSettings)

        remoteConfig.setDefaultsAsync(mapOf(
                REMOTE_KEY_APP_VERSION to "0.0.0"
        ))

        fetchAppVersion()
    }
    ...
    
    private fun fetchAppVersion() {
        // val appVersion = remoteConfig[REMOTE_KEY_APP_VERSION].asString()
        val appVersion = remoteConfig.getString(REMOTE_KEY_APP_VERSION)

        AlertDialog.Builder(this)
                .setTitle("Remote Config")
                .setMessage("App version :: $appVersion")
                .show()

        remoteConfig.fetchAndActivate()
                .addOnCompleteListener {
                    if (it.isSuccessful) {
                        // fetch and activate 성공
                    } else {
                        // fetch and activate 실패
                    }
                }
    }

    companion object {
        ...
        private const val REMOTE_KEY_APP_VERSION = "app_version"
    }
}

Remote Config 객체를 생성하여 초기화한다.


setDefaultAsync의 경우에, 만약 Firebase Remote Config에 변수가 정의되어 있지 않을 때, 디폴트로 값을 얻고자 한다면 사용해주면 된다. Map 객체로 넘겨주어도 되며, xml 형태로도 제공이 가능하다.

그리고 remoteConfig 객체로부터 get 종류의 함수를 통해 값을 얻거나, KTX를 활용하면 remoteConfig[KEY].asString() 과 같은 방법도 가능하다.

appVersion을 읽어 단순하게 다이얼로그로 확인하는 정도로 예제를 마친다.

그리고 fetchAndActivate는 값을 가져오고 활성화 하기 위하여 사용한다. 자세한 내용은 문서를 참고하는 것이 가장좋다.

위 코드를 수행하면, Firebase Remote Config에 추가한 대로 "2.0.0" 을 읽어오는 것을 확인할 수 있다.


4. Remote Config에 JSON 형태의 값 사용하기

사실 단일변수를 하나하나 추가하는 것은 활용하기 까다로울 수 있다.


또한 앱 버전을 체크하면서 강제 업데이트인지 아닌지에 대한 여부가 만약 필요하다면?
그리고 동시에 이벤트용 팝업 등에 대한 내용도 필요하다면?

단일 변수를 추가하는 것 만으로는 관리가 어려울 것이다.
그래서 JSON 형태의 데이터도 제공이 가능하다.

매개변수의 키와 값을 입력하는 위치에서, 맨 오른쪽 {} 를 클릭하면 "JSON Editor" 가 나타난다.

그리고 JSON 입력을 할 수 있고, 잘못된 형식인지 아닌지도 알려준다. 상당히 편리하다.

저장버튼을 누르면, 위와 같이 입력한 JSON 값이 입력된다. 키값을 입력해주고 마찬가지로 매개변수를 추가하자.

이제 JSON 형태의 값을 사용할 수 있게 되었다.
앱에서 이 데이터를 받아보자.

    private fun fetchAppVersion() {
        val appInfo = remoteConfig[REMOTE_KEY_APP_INFO].asString()
        AlertDialog.Builder(this)
                .setTitle("Remote Config")
                .setMessage("App Info :: $appInfo")
                .show()

        remoteConfig.fetchAndActivate()
                .addOnCompleteListener {
                    if (it.isSuccessful) {
                        // fetch and activate 성공
                    } else {
                        // fetch and activate 실패
                    }
                }
    }

    companion object {
        ...
        private const val REMOTE_KEY_APP_INFO = "app_info"
    }

키값을 변경하고 데이터를 받은 뒤 asString으로 변경한다. 그럼 다이얼로그의 내용은 아래와 같을 것이다.

JSON 형식으로 데이터를 받아왔다.
이를 활용해서 GSON과 같은 라이브러리로 JSON을 파싱한 후 데이터를 처리하면 될 것이다.


단순한 활용 예이지만 이 외에도 활용도가 굉장히 다양하다.

위에서 보면 알 수 있듯, 앱의 버전이나 플랫폼, 언어, 국가 등등 다양한 상황에서 사용되도록 할 수 있다.
A/B 테스트 또한 가능하다.

활용도가 높은 서비스이므로 잘 알아둔다면, 앱 개발과 서비스에 큰 역할을 할 수 있을 것이다.

반응형