안드로이드 최신버전으로 강제 업데이트 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()
}

댓글남기기