본문 바로가기

Android/개념 및 예제

[안드로이드/Android] 플레이스토어 앱 강제로 업데이트하기

출시한 앱의 경우 업데이트가 됐을 때 사용자에게 업데이트를 하라고 알려줘야 한다.

안드로이드에서는 AppUpdateManager 객체를 제공한다.

 

업데이트 요청 방식은 '즉시' , '유연' 으로 총 두 가지 방식이 있다.

  • '유연' 요청은 앱 백그라운드에서 업데이트를 받는 방식이다.

한 마디로 앱을 업데이트하면서 앱을 사용할 수 있게 하는 방식이다.

  • '즉시' 요청은 사용자가 앱을 업데이트하고 다시 시작해야 하는 전체 화면 사용자 환경입니다.

즉 앱 업데이트를 해야 앱을 사용할 수 있는 것이다.

이 포스팅에서는 '즉시' 업데이트에 대해서 알아볼 것이다.

 

 필요사항

1. 업데이트는 Android 5.0(API 수준 21) 이상을 실행하는 기기에서만 작동하며, 

2. Play Core 라이브러리 1.5.0 이상 사용이 필수입니다. 

 

기능 구현 과정

1. play core 라이브러리를 Gradle에 추가한다. (20년 7월 23일 기준, 최신 버전 : 1.7.3)

implementation 'com.google.android.play:core:1.7.3'

2. '즉시' 업데이트를 요청한다.

private void updaterequest() {
        // 앱 업데이트 여부 확인하고 업데이트 되있으면 업데이트 요청한다.

        // AppUpdateManager 객체 만들기
        AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(getApplicationContext());

        // 업데이트를 확인하기 위한 인텐트 겍체를 만든다.
        Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();

        // 업데이트 가능한지 확인한다.
        appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
            // 사용 가능한 업데이트가 있는 경우
            if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                    // For a flexible update, use AppUpdateType.FLEXIBLE
                    && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
                Log.d(TAG, "updaterequest:업데이트할 수 있음 ");
                // 사용자에게 업데이트를 요청한다.
                try {
                    appUpdateManager.startUpdateFlowForResult(
                            // Pass the intent that is returned by 'getAppUpdateInfo()'.
                            appUpdateInfo,
                            // Or 'AppUpdateType.FLEXIBLE' for flexible updates.
                            AppUpdateType.IMMEDIATE,
                            // 업데이트 요청을 위한 현재 화면
                            this,
                            // Include a request code to later monitor this update request.
                            UPDATE_REQUEST_CODE);
                    Log.d(TAG, "updaterequest:업데이트 요청함 ");
                } catch (IntentSender.SendIntentException e) {
                    e.printStackTrace();
                }
            }else{
                Log.d(TAG, "updaterequest:업데이트할 것이 없음 ");
            }
        });
    }

단점

앱을 플레이 스토어에 올리지 않아서 테스트 하기가 어렵다.

해당 코드가 업데이트를 어떻게 할 수 있는지 방법을 알아봐야 할 듯

 

참고 문서 : https://developer.android.com/guide/app-bundle/in-app-updates#update_readiness