일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- XML
- 플레이스토어
- 코딩테스트
- Build variants
- Jetpack
- NavHost
- coroutine
- NavController
- 로그인
- 컴포즈
- 리사이클러뷰
- sharedFlow
- 뷰
- Authentication
- Flow
- cleanarchitecture
- Kotlin
- Android
- 커스텀뷰
- 클린아키텍처
- 안드로이드
- 알고리즘
- ListAdapter
- 코틀린
- DiffUtil
- Compose
- MVVM
- UiState
- 파이어베이스
- 회원가입
- Today
- Total
Grusie 안드로이드 개발 기술 블로그
[Android] 플레이 스토어 버전 업데이트 관리하기 본문
플레이 스토어에 출시된 앱의 버전 업데이트를 관리 할 때에는 몇 가지 방식이 있다.
1. 강제 업데이트
2. 선택적 업데이트
3. 인앱 업데이트
우선 우리 회사의 경우 사용자 경험에 있어 최대한 강제 업데이트를 시키는 것을 권장하지 않는 주의이다.
그렇기에, 크리티컬한 오류가 있는 버전이 아니라면 강제 업데이트를 진행시키지 않는다.
그랬을 때의 로직을 생각해보자.
1. 서버 통신을 통해, 강제 업데이트를 진행해야 하는 최소 버전을 받아온다.
2. 만약 이 버전보다 낮다면, 강제로 업데이트를 진행하도록 해야한다.
3. 이 버전보다 높다면, 플레이스토어의 버전과 비교를 한다. 업데이트가 가능하다면 선택적 업데이트 다이얼로그를 띄워준다.
4. 만약 나중에 하기를 선택했을 경우, 1주일 뒤에 다시 다이얼로그를 띄워준다.
이런식으로 구현을 하게 되었다.
하나씩 살펴보자
1. 서버 통신을 통해, 강제 업데이트를 진행해야 하는 최소 버전을 받아온다.
서버에서 앱 정보를 담은 DB에 강제 업데이트를 진행해야 하는 최소 버전을 기입해두고, 모바일에서 앱을 실행 시킬 때, 스플래시에서 이 버전을 요청한다.
2. 만약 이 버전보다 낮다면, 강제로 업데이트를 진행하도록 해야한다.
if (isCurrentAppVerLower) {
// 강제 업데이트
Utils.alert(context, null, getString(R.string.msg_app_update_require), null, new Runnable() {
@Override
public void run() {
// 마켓 이동
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=" + getPackageName()));
startActivity(intent);
finish();
}
});
}
}
강제 업데이트의 경우, 마켓 페이지로 이동시킨 후 앱을 종료한다고 생각하면 된다.
물론 인앱 업데이트가 있으나, 그건 추후에 알아보도록 하자
3. 이 버전보다 높다면, 플레이스토어의 버전과 비교를 한다. 업데이트가 가능하다면 선택적 업데이트 다이얼로그를 띄워준다.
implementation("com.google.android.play:app-update:2.1.0")
플레이 스토어의 버전 정보를 가져오기 위한 의존성 추가
else {
//플레이스토어의 버전과 비교
AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(this);
appUpdateManager.getAppUpdateInfo().addOnSuccessListener(appUpdateInfo -> {
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
&& appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
confirmAppUpdate(appData, currentAppVer, currentDate);
} else {
mHandler.sendEmptyMessage(MSG_INTENT_CHK);
}
}).addOnFailureListener(e -> {
mHandler.sendEmptyMessage(MSG_INTENT_CHK);
});
}
만약, 강제 업데이트 버전보다 현재 버전이 높다면, 플레이스토어에 올라가있는 버전과 비교해야한다.
AppUpdateManager를 생성해주고, 그리고 앱이 업데이트 가능한 상태인(UpdateAvailability.UPDATE_AVAILABLE), 해당 업데이트 타입을 적용할 수 있는지(isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) 체크 후
업데이트가 가능하다면, 선택적 다이얼로그를 띄워준다.
선택적 다이얼로그에는, 나중에 하기를 선택 시, 그 버전에 대해서 1주일간 알림을 띄우지 않도록 하였고, 업데이트 하러가기를 선택 시 마찬가지로 플레이스토어로 이동하도록 구현하였다.
private HashMap<String, String> app_version_update_check; //앱 버전 업데이트 알림 시기
앱의 로컬 DB에 HashMap을 활용하여, 앱 버전과, 나중에 하기를 선택한 시점의 날짜를 String으로 저장해두도록 구현하였다.
인앱 업데이트의 경우 이런 저런 생각해야 할 것이 많아, 처리를 해두진 않았으나 중요한 로직만 말해보자면
1. 업데이트 가능 여부와, 설치의 진행상태 확인 후 띄워주기
2. 업데이트 중간에 취소 했을 때의 처리
3. 업데이트 중간에 뒤로가기를 했을 때의 처리(보통 다시 업데이트 페이지로 이동하도록 구현한다고 함)
이렇게 3가지를 유의하며 구현하면 인앱 업데이트도 크게 어렵지는 않은 것 같다.
인앱 업데이트는 이 블로그들에 잘 나와 있어, 확인 해 보길 바란다.
https://black-jin0427.tistory.com/212#recentEntries
https://velog.io/@pachuho/Android-%EC%9D%B8%EC%95%B1-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8
후기
당연하다면 당연하겠지만, 플레이스토어에서 업데이트 버전에 대한 정보를 받아올 수 있도록 되어있어 구현하기 간단했다. 나중에 하기를 처리하기 위해서, SharedPreferences를 사용하였으나, 어떤 타입으로 저장해야할지 고민하다가, Key-Value 형태로 하기 위해 HashMap을 저장하도록 처리하였다.
간단하게 플레이스토어로 이동시키는 것이기에 크게 어려움이 없을 것이라 생각하였고, 우리 앱의 업데이트 목적이 크리티컬한 버그가 발생하는 버전 이하일 경우에만 업데이트를 하게 하는 것이라 사용자 입장에서도 크게 불편하진 않을 것이라고 생각한다.
'안드로이드 개발' 카테고리의 다른 글
[Android] 커스텀 갤러리 만들기(이미지 불러오기, 다중 이미지 선택) (0) | 2024.05.27 |
---|---|
[Android] release 버전에서 Gson 파싱이 안 되던 오류(코드 난독화 문제) (0) | 2024.05.07 |
[Android] 리사이클러뷰 DiffUtil 사용법 및 단일 체크 처리하기 (0) | 2024.04.30 |
[Android] CallAdapter로 레트로핏 에러 처리하기 (1) | 2024.04.25 |
[Android] 버전 카탈로그로 Gradle 의존성 관리하기 (0) | 2024.04.24 |