- [Android] AppUpdateManager 앱 업데이트 확인하기2023년 12월 29일 22시 37분 25초에 업로드 된 글입니다.작성자: 핀수728x90반응형
앱을 사용하다 가끔 업데이트 하라는 팝업을 본 적이 있을 것이다.
앱의 버전을 확인하고, 업데이트가 필요할 경우 플레이스토어로 이동할 수 있도록 기능을 추가해보려고 한다.
AppUpdateManager
앱이 자체 업데이트를 시작할 수 있도록 하는 작업을 관리하도록 도와주는 인터페이스이다.
그러니까 인앱 업데이트를 구현하기 위한 클래스인데, 이번에는 업데이트 필요 여부에 관한 것 정도만 확인할 예정이다.
초기화
val appUpdateManager = AppUpdateManagerFactory.create(context)
업데이트 상태 확인
fun getAppUpdateStatus() { // 업데이트 가능한지 확인 val appUpdateInfoTask = appUpdateManager.appUpdateInfo // 업데이트 상태 확인 성공 리스너 appUpdateInfoTask.addOnSuccessListener { appUpdateInfo -> // 업데이트가 가능하면 if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE) { _appUpdateStatusStateFlow.value = UiState( status = Status.SUCCESS, data = appUpdateInfo.updatePriority() ) } else { _appUpdateStatusStateFlow.value = UiState( status = Status.SUCCESS, data = MyAppUpdateStatus.UPDATE_NOT_EXIST ) } } // 업데이트 상태 확인 실패 리스너 appUpdateInfoTask.addOnFailureListener { _appUpdateStatusStateFlow.value = UiState( status = Status.ERROR, message = "일시적인 오류로 업데이트 상태를 확인할 수 없습니다", throwable = it ) } }
업데이트 상태 확인에 성공하면 (successListener)
업데이트가 가능한지에 대한 여부를 확인할 수 있다. → UpdateAvailability.UPDATE_AVAILABLE
업데이트가 가능하다면, 업데이트의 우선순위를 확인할 수 있다. → appUpdateInfo.updatePriority()
이 우선순위는 Google Play Developer API에서 개발자가 정의한 업데이트의 우선순위를 의미한다.
시멘틱 버저닝에 따라 주.부.수에서
주(major)에 해당하는 것은 우선순위를 높게 설정하여 강제로 업데이트를 진행하도록 하고
부(minor)에 해당하는 것은 우선순위를 중간으로 설정하여 업데이트를 권장하도록 하고
수(patch)에 해당하는 것은 우선순위를 가장 하위로 두어 업데이트를 진행하지 않아도 무관하도록 하였다.
업데이트의 우선순위를 지정하는 방법은
[Android] Google Play Developer API으로 앱 출시하기
들어가며 앱을 마켓에 배포하고 나서 앱이 업데이트가 되면 사용자들에게 업데이트를 안내해야한다. 다 그런건지는 모르겠지만 앱을 다운받으면 자동 업데이트에 체크가 되어있긴 하던데.. 자
www.pinslog.com
위 링크들을 참고하면 도움이 될 것 같다.
코드를 보면 알겠지만 updateAvailability() 가 UpdateAvailability.UPDATE_AVAILABLE를 반환하는 경우에만 해당 우선순위를 확인할 수 있다.
업데이트 상태에 따른 처리
appUpdateViewModel.appUpdateStatusStateFlow.asLiveData() .observe(this@MainActivity) { uiState -> when (uiState.status) { Status.SUCCESS -> { uiState.data?.let { updatePriority -> when (updatePriority) { MyAppUpdateStatus.UPDATE_RECOMMENDATION -> { // 업데이트 권고 } MyAppUpdateStatus.UPDATE_NECESSARY -> { // 업데이트 강제 } MyAppUpdateStatus.UPDATE_NOT_EXIST, MyAppUpdateStatus.UPDATE_IGNORE -> Unit } } } else -> Unit } }
위에서 설명한대로 업데이트 우선순위에 따라 처리한다.
TroubleShooting
다음과 같은 오류가 발생하였다.
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. (https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_APP_NOT_OWNED))
이전에 정리해둔 글을 보고 해결하였다.
아래 링크를 참고하면 된다.
[Google Play Store 관련 오류 코드] Install Error(-10): The app is not owned by any user on this device. An app is "owned"
앱을 실행할 때 업데이트 정보를 받아오기 위해 AppUpdateManager 클래스를 이용해서 정보를 받아온다. AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(mContext); appUpdateManager.getAppUpdateInfo().addOnSucces
www.pinslog.com
공부하며 작성된 글이라 잘못된 정보가 있을 수 있습니다.
말씀해주시면 수정하겠습니다. 감사합니다.
References
아래 글을 참고하여 작성 되었습니다.
AppUpdateManager
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
devmason.tistory.com
AppUpdateManager | Android Developers
Stay organized with collections Save and categorize content based on your preferences. Summary: Methods AppUpdateManager public interface AppUpdateManager com.google.android.play.core.appupdate.AppUpdateManager Manages operations that allow your app to ini
developer.android.com
AppUpdateInfo | Android Developers
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates. Last updated 2022-11-02 UTC. [{ "type": "thumb-down", "id": "missi
developer.android.com
728x90반응형'Android > Android' 카테고리의 다른 글
[Android] SharedPreferences를 대체할 DataStore에 대해 알아보자 (0) 2024.01.19 [Android] BottomSheetDialog (0) 2023.12.30 [Android] 권한 요청 워크 플로우 (0) 2023.12.28 [Android] 외부저장소에 파일 저장하기 (0) 2023.11.13 [Android] Android FCM 설정 (0) 2023.10.11 다음글이 없습니다.이전글이 없습니다.댓글