제이슨의 개발이야기
Firebase RemoteConfig 이용해보기! Android with Coroutin , viewPager2 이용 본문
안녕하세요 오늘은 Firebase RemoteConfig 에 대해서 공부해봤습니다!
해당 글은 파이어베이스 기본 세팅에 대해서는 생략하겠습니다
Firebase RemoteConfig 란 앱에서 별도의 업데이트를 하지 않아도 앱의 동작과 모양을 변경할 수 있는 클라우드 서비스입니다.
예를 들면 앱 화면에 특정 문자열이 있는대 이 문자열을 하루에 한번씩 바꾸고 싶을때 매일매일 해당 앱 서비스를 업데이트 할 수 는 없습니다! 이럴 때 Firebase RemoteConfig 를 이용하면 하루에 한번씩 내가 원하는 문자열을 추가 해주면 전체 앱 사용자 혹은 전체 사용자 중 일부만 이전 문자열을 새로운 문자열로 교체 할 수 있습니다!
잘만 이용한다면 굉장히 유용한 기능인거같습니다 ㅎㅎ
RemoteConfig 를 이용하는 실제 예로는
저는 공부용 프로젝트로 파이어베이스 에 스토리지에 저장되어 있는 이미지 url 을 미리 넣어두고 읽어 들여서 화면에 뷰페이저로 보여지는 간단한 프로젝트를 진행해 봤습니다
일단 파이어베이스 프로젝트를 세팅 하고 나서
build.glide app단 에서
implementation 'com.google.firebase:firebase-config-ktx'
implementation 'com.google.firebase:firebase-analytics-ktx'
을 추가해줍니다!
implementation 'com.google.firebase:firebase-config-ktx' 는 remoteConfig를 위한 종속성이고
implementation 'com.google.firebase:firebase-analytics-ktx' 는 나중에 파이어 베이스에서 대쉬보드를 통해 파이어베이스 가 제공하는(firestore , function 등등) 서비스 상태를 확인할 수 있는 종속성입니다
그리고 콘솔창에서 왼쪽에
여기에서 Remote Config를 눌러줍니다!
Remote Config 페이지로 넘어와서 화면에서 {} 을 눌러서 매개변수에 추가할 데이터를 입력해줍니다
데이터 형식은 JSON 형식으로 입력 해주셔야 합니다!
저 같은 경우
으로 입력했습니다! 각 3개의 path는 이미지가 저장되어있는 url 주소 입니다
다음에 안드로이드 프로젝트로 넘어와서
메인 엑티비티 에서
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
CoroutineScope(Dispatchers.Main).launch {
var list = initData()
var viewPager = findViewById<ViewPager2>(R.id.viewpager)
var adapter = viewPagerAdapter(list,applicationContext)
viewPager.adapter = adapter
}
}
suspend fun initData() : ArrayList<String>{
var list = ArrayList<String>()
var remoteConfig = Firebase.remoteConfig
remoteConfig.setConfigSettingsAsync(
remoteConfigSettings {
minimumFetchIntervalInSeconds = 0
}
)
// remoteConfig.setDefaultsAsync()
remoteConfig.fetchAndActivate().addOnCompleteListener {
if(it.isSuccessful){
list = parsingJson(remoteConfig.getString("main"))
}
}.addOnFailureListener {
}.await()
return list
}
fun parsingJson(json : String) :ArrayList<String>{
val jsonArray = JSONArray(json)
var list = ArrayList<String>()
for(index in 0 until jsonArray.length()){
val jsonObject = jsonArray.getJSONObject(index)
jsonObject?.let{
list.add(it.getString("path"))
}
}
return list;
}
}
initData() 메소드를 처음에 실행해서 RemoteConfig에서 JSON파일을 읽어들입니다
처음에 remoteConfig.setConfigSettingsAsync() 부분은 remoteConfig 에 Setting 을 하는 부분입니다
minimumFetchIntervalInSeconds = 0 은 Fetch 하는 인터벌 을 정하는 부분입니다
remoteConfig을 통해서 한번 가저온 데이터는 인터벌로 정한 시간 동안 다시 가저 오지않습니다
파이어베이스는 앱에서 단기간에 가져오기를 너무 많이 수행하면 가져오기 호출이 제한되고 SDK는 FirebaseRemoteConfigFetchThrottledException을 반환합니다. 60분동안 5개 이상 호출하게 되면 block됩니다!
그래서 보통 그것을 방지하기 위해 인터벌 시간을 적어도 60분이상 주는 경우가 대부분입니다
저같은 경우 테스트를 위해서 0으로 했고 실제 서비스를 개발할때는 60분이상 즉 3600 이상 부여하는것을 추천합니다
기본값은 12시간입니다!
https://firebase.google.com/docs/remote-config/use-config-android?hl=ko
코드를 보면 주석으로
// remoteConfig.setDefaultsAsync()
된 부분이 있습니다 이 부분은 매개변수를 지정하지 않을 경우 default 값을 부르는 메소드 입니다
저같은 경우 이 부분을 생략했지만 보통 실제 서비스를 개발 하시는 분들은 Default 인 경우 따른 세팅도 같이 합니다!
그리고 앱이 시작하면서 remoteConfig.fetchAndActivate().addOnCompleteListener 을 통해서 비동기 방식으로
데이터를 가저옵니다 ! 해당 데이터는 JSON으로 오기 때문에 JSON을 자신이 원하는 형식으로 변환이 필요합니다 !
먼저 remoteConfig.getString("Keyname") 을 통해 JSONArray 데이터를 받습니다 Keyname은 매개변수 지정할때 매개변수 key를 의미합니다
그 다음에 이것을 JSON으로 변환 후 getString("path")을 통해 원하는 값을 파싱했습니다
이런식으로 remoteConfig 을 이용해서 데이터를 받을 수 있습니다 !
해당 코드는 remoteConfig 뿐만 아니라 Coroutin 과 ViewPager2 을 이용해서 프로젝트를 진행 했는대
두가지에 대한 설명은 생략하겠습니다!
혹시 코루틴에 대해 알고 싶다면 아래에 링크로 가시면 배울 수 있습니다
https://jason-api.tistory.com/38
https://jason-api.tistory.com/25
전체 코드를 보고 싶다면 아래에 깃헙을 이용해주세요!
https://github.com/jaeilssss/AndroidStudy/tree/main/remoteConfigProject
'안드로이드' 카테고리의 다른 글
안드로이드 서버 응답을 기다리는 중 화면터치 막는 방법 ! (0) | 2021.07.14 |
---|---|
ViewPager2 로 양쪽 페이지 살짝 보이게 만들기! (0) | 2021.06.04 |
FCM 푸시메시지 보낼때 안드로이드 화면 깨우기 Kotlin (0) | 2021.05.28 |
Edit text 글자 입력 시 검색 페이지 개발 with 알고리아서치 API(Algoria Search Api) (0) | 2021.05.28 |
Firebase CloudFunction 을 이용한 FCM 을 이용한 푸시(push) 메시지 받기 && 보내기 (0) | 2021.05.27 |