TV 애플리케이션 업데이트 문제 해결 전략
TV 애플리케이션 업데이트 시스템에서 발생하는 사용자 경험 저하 문제를 해결하기 위해 my-tv 프로젝트의 자동 업데이트 구조를 분석합니다. 이 기술은 버전 비교부터 설치까지의 전체 과정을 자동화하여 사용자가 인터페이스에 개입하지 않도록 설계되었습니다.
핵심 아키텍처 개요
my-tv 프로젝트는 UpdateManager.kt 파일을 중심으로 구성되어 있습니다. MVVM 패턴을 기반으로 한 시스템은 버전 확인, 권한 처리, 다운로드 관리, 진행 상황 모니터링, 자동 설치 등 5개 핵심 모듈로 구성됩니다.
버전 검증 시스템
버전 검증은 UpdateManager.kt 내 checkAndUpdate() 메서드에서 수행됩니다. 서버에서 최신 버전 정보를 요청하고, 로컬 버전 코드와 비교하여 업데이트 여부를 판단합니다:
val latestVersion = fetchReleaseInfo()
if (latestVersion?.code!! > currentVersionCode) {
"최신 버전: ${latestVersion.name}\n${latestVersion.description ?: ""}"
} else {
"현재 최신 버전입니다."
}
버전 정보에는 코드(Version Code), 이름(Version Name), 설명(Description) 등의 세 가지 주요 파라미터가 포함됩니다.
사용자 상호작용 및 권한 처리
TV 애플리케이션은 대형 화면과 거리에 따른 가독성 고려가 필수적입니다. ConfirmationFragment.kt를 통해 간단한 업데이트 확인 대화상자를 제공합니다:
val dialog = AlertDialog.Builder(context)
.setTitle("업데이트 확인")
.setMessage(updateMessage)
.setPositiveButton("확인") { _, _ ->
onConfirmAction()
}
.setNegativeButton("취소") { _, _ ->
onCancelAction()
}
.create()
저장 권한 처리는 Android 버전별 호환성을 보장하기 위해 haveStoragePermission() 메서드에서 구현됩니다.
다운로드 및 진행 상황 모니터링
startDownload() 메서드에서 다운로드 작업이 처리되며, DownloadManager API를 사용하여 백그라운드 다운로드를 지원합니다:
val request = DownloadManager.Request(url)
.setDestinationInExternalFilesDir(
context,
Environment.DIRECTORY_DOWNLOADS,
"app_update.apk"
)
.setTitle("앱 업데이트")
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
다운로드 진행률은 주기적으로 DownloadManager를 쿼리하여 실시간으로 업데이트됩니다.
자동 설치 구현 방안
DownloadReceiver의 installNewVersion() 메서드에서 설치 로직이 실행됩니다:
val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.fromFile(File(...))
intent.type = "application/vnd.android.package-archive"
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent)
Android 8.0 이상에서는 Unknown Sources 권한 처리가 추가적으로 필요합니다.
실제 적용 흐름
- 설정 메뉴에서 버전 검사를 트리거
- 버전 차이 확인 후 업데이트 대화상자 표시
- 사용자 승인 후 다운로드 시작 및 진행률 표시
- 다운로드 완료 시 자동 설치 프로세스 시작
- 설치 완료 후 재시작 안내 제공
최적화 전략 요약
- 사용자 중심 디자인: 명확한 안내와 최소한의 인터랙션
- 백그라운드 처리: UI 블록 방지를 위한 별도 스레드 사용
- 오류 관리: 다양한 예외 상황 대응 체계 구축
- 버전 호환성: Android OS 버전별 적응 로직 포함
프로젝트 소스코드는 UpdateManager.kt와 ConfirmationFragment.kt를 참고하면 됩니다. 더 많은 기능 구현 사례는 공식 문서를 확인하시기 바랍니다.