이번에 안드로이드 앱을 출시하며, 추후 유지보수를 위해 앱 업데이트 로직을 앱에 포함해야 했다. 출시 후에 유저가 앱을 사용하다 문제가 생기거나, 앱에 새로운 기능을 추가해야 하는 상황이 생기면, 새로운 버전으로 업데이트 해야되니까 😏
만약 앱 업데이트 로직을 코드에 포함하지 않는다면, 기본 플로우는 그냥 사용자가 구글 플레이 스토어에 들어가야 업데이트를 할 수 있도록 나오고, 이를 사용자가 확인하지 않는다면, 계속 업데이트 하지 않고 앱을 사용할 수 있는 방식인 것 같,,다. 아마도 ?? ㅋㅎ
우리 팀에게 필요했던 업데이트 로직은 👇🏻👇🏻 였다.
앱이 도중에 중단되는 등의 크리티컬한 버그나 문제를 해결하기 위한 업데이트라면, 사용자가 꼭 업데이트 하게 하도록 하고, 그게 아니라면 사용자가 선택적으로 업데이트 하도록 하자 !
이러한 앱의 업데이트 로직을 구현하기 위해선 앱의 버전을 설정해줘야 한다. 우선, 앱의 버전이란 우리가 구글플레이스토어에서 앱을 다운 받을 때 1.0.0
, 2.0.1
등의 버전 정보라고 생각하면 된다.
우리가 이러한 앱의 버전을 설정해주기 위해 건드릴 수 있는(?) data는 크게 2개이다. 바로 versionCode
와 versionName
이다.
위의 그림에서 보듯이, 두 data 모두 module 수준의 build.gradle
파일에서 확인하고 값을 변경할 수 있다.
우선, 각 data에 대한 android 공식문서의 설명을 보면
versionCode
양의 정수이며, 내부 버전 번호로 사용된다. 이 번호는 한 버전이 다른 버전보다 최신인지 여부를 판단하는 데만 사용되며, 번호가 높을수록 최신 버전이다. 사용자에게 표시되는 버전 번호가 아니다. 사용자에게 표시되는 번호는 아래에 나와 있는 versionName
설정으로 지정된다.
일반적으로 앱의 첫 번째 버전은 versionCode
를 1로 설정하여 출시하고, 주 출시 버전이든 부 출시 버전이든 관계없이 각 버전마다 일정하게 값을 증가시킨다. 즉, versionCode
값은 사용자에게 표시되는 앱 출시 버전과 매우 유사할 필요는 없다(아래 versionName
참고). 앱과 게시 서비스는 사용자에게 이 버전 값을 표시해서는 안 된다.
versionName
<major>.<minor>.<point>
문자열이나 다른 유형의 절대 또는 상대 버전 식별자로 앱 버전을 설명할 수 있다. versionName
은 사용자에게 표시하는 것 이외에 다른 용도는 없다.라고 하는데,,,,, 무슨 소린지 잘 모르겠다면 ? 👇
versionCode
는 실제 앱 업데이트 로직을 구현할 때, 새로운 버전인지 판단하는 기준이되는 변수로 사용자에게 표시되지는 않고,versionName
은 실제 앱의 업데이트 로직에 사용되지는 않지만, 사용자에게 보여지는 버전 정보이다. 즉, 개발자들이 이용하는 버전정보와 사용자들이 보게 되는 버전정보는 서로 다르다는 것이다 !!
즉, 우리 같은 개발자들은 versionCode
와 versionName
, 총 두 개의 변수의 값을 증가시키지만, 실제 업데이트를 판단하는 데 기준이 되는 것은 versionCode
이고, 사용자에게 보여지는 정보는 versionName
이라는 것이다 ! 그리고 사용자들이 구글 플레이스토어에서 보게되는 2.0.1
같은 버전 정보는 versionName
인 것이다 !
앱의 버전을 구성하는 정보들을 알게 되었고, 본격적으로 앱 업데이트에 대해서 찾아보다가, 인앱 업데이트라는 기능을 알게 되었다 !
인앱 업데이트란?
👉🏻 간단히 말해서 사용자가 앱을 실행했을 때, 사용자에게 "앱을 업데이트하라"는 팝업 메시지를 표시하고 앱 안에서 업데이트를 가능하게 하는 (플레이스토어에 들어가지 않고) 기능이다. 그래서 in app update 인가? 이름 잘 지었네 ㅇㅈ
인앱 업데이트에는 크게 2가지 흐름이 있는데
=> 유연한 업데이트는 사용자가 앱을 시작했을 때, 팝업 메세지로 업데이트를 알리고, 업데이트를 선택적으로 진행할 수 있도록 하는 흐름이다. 백그라운드에서 다운로드를 진행하기 때문에, 사용자가 업데이트를 하는 동안 앱을 사용할 수 있다! 그렇기 때문에 앱에 핵심 기능이 아니지만 새 기능이 추가되었을 때 사용하면 좋은 업데이트 방식이다. 약간 "새로운 기능 나왔는데, 업데이트 하면 좋고~~ 근데 뭐 안해도 되고~~ 심지어 앱 사용하면서 업데이트 할 수 있고~~ 이래도 안해? 이런 느낌인 것 같다 ㅋㅎ
하지만 우리 팀에서 필요한 업데이트 로직 상, 크리티컬한 문제가 아니라면, 따로 앱 시작 시 팝업을 띄우는 것도 아니고, 사용자가 구글플레이스토어에 들어가서 선택적으로 업데이트 할 수 있도록 할 것이기 때문에 굳이 앱 안에서 선택적 업데이트를 구현할 필요가 없어서 이 유연한 업데이트 방식은 사용 안할 것이므로 그냥 읽고 pass 했다 ~~
👉🏻 이 즉시 업데이트가 우리 팀에서 필요한 업데이트 로직이다 !
쉽게 정리하면
이런식으로 구현할 것이다 !
즉시 업데이트에 대한 자세한 구현 방법과 실제로 코드에 적용한 결과는 다음 글에서 설명하겠다 👀