본문 바로가기

안드로이드 인앱 업데이트 ( In App Update )

mobile/android by 낼스 2020. 7. 13.
# 인앱 업데이트 ( In App Update ) #### 꼭지켜야할 조건 - Apk생성 : "Android App Bundle" 로 생성한다. >> .apk 안됨 aab로 생성 - 동일한 서명을 이용한다. #### Google Play 스토어 앱 "내부 앱 공유" 설정 활성화. - Google Play 스토어 앱 Google Play을 엽니다. - 메뉴 메뉴 > 설정을 탭합니다. - '정보' 섹션에서 Play 스토어 버전을 7번 탭합니다. - 내부 앱 공유 설정이 표시되면 스위치를 탭하여 내부 앱 공유를 사용 설정합니다. - 사용을 탭합니다. #### "내부 앱 공유"를 통해 낮은 버전앱 설치 - https://play.google.com/console/internal-app-sharing - 낮은 버전앱 빌드 후 내부앱에 업로드 - 업로드된 낮은 버전앱 링크복사해서 폰에 설치
※ "Google Play 스토어 앱" 설정에서 "내부 앱 공유"가 "사용"으로 설정되어야함. #### "내부 앱 공유"를 통해 높은 버전앱 설치 - https://play.google.com/console/internal-app-sharing - 높은 버전앱 빌드 후 내부앱에 업로드 - 업로드된 높은 버전앱 링크복사를 통해 화면에 진입하면 "Update" 버튼으로 활성화됨. - 이때, 업데이트 하지 않고, - 낮은 버전앱을 재진입함. - In App Update 코딩이 적용되어 동작하면 정상.
#### In App Update Source ``` @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initInAppUpdate(); } public void initInAppUpdate() { mAppUpdateManager = AppUpdateManagerFactory.create(getApplicationContext()); Task appUpdateInfoTask = mAppUpdateManager.getAppUpdateInfo(); appUpdateInfoTask.addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(AppUpdateInfo appUpdateInfo) { if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && // 유연한 업데이트 사용 시 (AppUpdateType.FLEXIBLE) 사용 appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) { try { mAppUpdateManager.startUpdateFlowForResult( appUpdateInfo, AppUpdateType.IMMEDIATE, MainActivity.this, MY_REQUEST_CODE); } catch (IntentSender.SendIntentException e) { Log.e("AppUpdater", "AppUpdateManager Error", e); e.printStackTrace(); } } else { } } }); InstallStateUpdatedListener installStateUpdatedListener = new InstallStateUpdatedListener() { @Override public void onStateUpdate(InstallState state) { if (state.installStatus() == InstallStatus.DOWNLOADED){ // Snackbar snackbar = // Snackbar.make( // findViewById(R.id.webview), // "New app is ready!", // Snackbar.LENGTH_INDEFINITE); // snackbar.setAction("Install", view -> { if (mAppUpdateManager != null){ mAppUpdateManager.completeUpdate(); } // }); } else if (state.installStatus() == InstallStatus.INSTALLED){ if (mAppUpdateManager != null){ mAppUpdateManager.unregisterListener(this); } } else { Log.i(TAG, "InstallStateUpdatedListener: state: " + state.installStatus()); } } }; mAppUpdateManager.registerListener(installStateUpdatedListener); } ``` ``` @Override protected void onResume() { mAppUpdateManager.getAppUpdateInfo().addOnSuccessListener( new OnSuccessListener() { @Override public void onSuccess(AppUpdateInfo appUpdateInfo) { if (appUpdateInfo.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) { try { mAppUpdateManager.startUpdateFlowForResult(appUpdateInfo, AppUpdateType.IMMEDIATE, MainActivity.this, MY_REQUEST_CODE); } catch (IntentSender.SendIntentException e) { e.printStackTrace(); } } } }); } ``` #### 참고 - https://www.it-swarm-ko.tech/ko/android/android-인앱-업데이트-api로-작업하는-방법/810178337/ - https://velog.io/@twkim8548/Android-In-App-Update

댓글