AppUpdateManager
2021. 10. 26. 13:27ㆍAndroid
반응형
private val appUpdateManager by lazy {
AppUpdateManagerFactory.create(this)
}
// com.google.android.play.core.install.InstallException: Install Error(-10): The app is not owned by any user on this device. An app is "owned" if it has been acquired from Play.
// -> 플레이스토어에 이미 앱이 출시되어있는데 현재 계정으로 받은 내역이 없어서 발생하는 오류. 현재 로그인되어있는 계정으로 해당 앱을 한번 설치해준후 다시 진행해준다
CoroutineScope(Dispatchers.IO).launch {
val appUpdateInfo = appUpdateManager.appUpdateInfo.await()
when(appUpdateInfo.updateAvailability()){
UpdateAvailability.UPDATE_AVAILABLE -> {
Log.d(TAG, "updateAvailability UPDATE_AVAILABLE")
// 업데이트 가능한 상태
startUpdateFlow(appUpdateInfo)
}
UpdateAvailability.UNKNOWN -> {
// 알수 없음
Log.d(TAG, "updateAvailability UNKNOWN")
}
UpdateAvailability.UPDATE_NOT_AVAILABLE -> {
// 현재 최신버전이며 업데이트가 필요 하지 않은 경우
Log.d(TAG, "updateAvailability UPDATE_NOT_AVAILABLE")
}
UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS -> {
// AppUpdateType.IMMEDIATE 타입을 통해 업데이트를 수행중인 경우
Log.d(TAG, "updateAvailability DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS")
}
}
}
private suspend fun Task<AppUpdateInfo>.await(): AppUpdateInfo {
return suspendCoroutine { continuation ->
addOnCompleteListener { result ->
if (result.isSuccessful) {
continuation.resume(result.result)
} else {
continuation.resumeWithException(result.exception!!)
}
}
}
}
private fun startUpdateFlow(appUpdateInfo: AppUpdateInfo) {
Log.d(TAG, "startUpdateFlow :: ${appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)}")
if(appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) { // 실제로 업데이트 가능한지 확인 할 수 있습니다.
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo,
AppUpdateType.IMMEDIATE , // or AppUpdateType.IMMEDIATE
this,
1000)
val listener = InstallStateUpdatedListener {
if (it.installStatus() == InstallStatus.DOWNLOADED) {
Snackbar.make(coordinator_layout, "업데이트 버전 다운로드 완료", Snackbar.LENGTH_INDEFINITE)
.setAction("설치/재시작", View.OnClickListener {
appUpdateManager.completeUpdate()
}).show()
}
}
appUpdateManager.registerListener(listener)
}
}
override fun onResume() {
super.onResume()
/**
* 업데이트중에는 항상 업데이트 UI만 보여지게 하기위해서는
* UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS 상태로 처리하면 됩니다.
*/
appUpdateManager.appUpdateInfo
.addOnSuccessListener {
Log.d(TAG, "onResume addOnSuccessListener :: ${it.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS}")
if (it.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
startUpdateFlow(it)
}
}
}
반응형
'Android' 카테고리의 다른 글
[전자책] 안드로이드 Compose 기반 암호화폐 거래소 연동 앱 개발 (0) | 2024.05.14 |
---|---|
Filterable (0) | 2021.11.04 |
Android 11 (Api 30) 파일 저장 관련 (0) | 2021.05.27 |
안드로이드 RecyclerView 성능 개선팁 (0) | 2020.12.10 |
HorizontalScrollView Scroll Animation (0) | 2020.12.10 |