안드로이드 강제 업데이트 구현
안드로이드 최신버전으로 강제 업데이트 alert
- firebase와 연동해서 업데이트 alert 띄우는 방법
앱 구동 시 현재 버전 정보를 가져옴
- 앱 구동 시 현재 버전 정보를 가져오는 함수를 만들어서 onCreate에서 호출
- debug에서는 작동하지 않도록 설정
if (!BuildConfig.DEBUG) VersionCheck(this).checkVersion()
firebase remote config를 활용해서 최신버전 정보 확인
- 구글스토어의 url로 접속해서 크롤링 하는 방법을 구글링 해봤지만, 해당 글들의 페이지는 예전 페이지로 현재와 설정사항이 달랐고 구현이 더 복잡할 것으로 느껴져 remote config를 사용하기로 했다
- 새로운 클래스를 만들어서 아래 함수 구현
- firebase remote config를 이용해서 버전 정보를 가져옴
// firebase remote config를 이용한 버전 체크
// 최신버전 업데이트 시 firebase remote config에서 변경 필요
fun checkVersion() {
remoteConfig = Firebase.remoteConfig
val configSettings = remoteConfigSettings {
minimumFetchIntervalInSeconds = 0
}
remoteConfig.setConfigSettingsAsync(configSettings)
remoteConfig.setDefaultsAsync(mapOf(
REMOTE_KEY_APP_VERSION to "0.0.0"
))
fetchAppVersion()
}
- fetchAppVersion 함수에서 remote config에서 버전 정보를 가져옴
fun fetchAppVersion() {
// firebase remote config에서 버전 정보 가져오기
val newVersion = remoteConfig.getString([여기에 remote config에서 설정한 key값])
remoteConfig.fetchAndActivate()
.addOnCompleteListener {
if (it.isSuccessful) {
// fetch and activate 성공
if (isVersionHigher(newVersion)) {
// 최신버전일 경우 업데이트 alert 띄우기
showUpdateDialog(appCompatActivity)
}
} else {
// fetch and activate 실패
}
}
}
- isVersionHigher 함수에서 현재 버전과 remote config에서 가져온 버전을 비교
- 현재 버전이 높으면 true, 낮으면 false를 반환하도록 함
- 버전 정보는 0.0.0 형식으로 되어있음
fun isVersionHigher(newVersion: String): Boolean {
val newVersionDigits = newVersion.split(".").map { it }
val currentVersionDigits = [여기에 app:build.gradle의 versionName].split(".").map { it }
for (i in newVersionDigits.indices) {
if (i >= currentVersionDigits.size) {
return true
}
if (newVersionDigits[i] > currentVersionDigits[i]) {
return true
} else if (newVersionDigits[i] < currentVersionDigits[i]) {
return false
}
}
return false
}
버전정보 비교 후 alert 띄우기
fun showUpdateDialog(appCompatActivity: AppCompatActivity) {
val mDialog = AlertDialog.Builder(appCompatActivity)
mDialog.setMessage("업데이트가 필요해요.")
.setCancelable(false)
.setPositiveButton("업데이트") { dialog, id ->
val marketLaunch = Intent(Intent.ACTION_VIEW)
marketLaunch.data = Uri.parse(STORE_URL)
appCompatActivity.startActivity(marketLaunch)
appCompatActivity.finishAffinity()
}
val alert: AlertDialog = mDialog.create()
alert.setTitle("업데이트")
alert.show()
}
댓글남기기