# 인앱 업데이트 ( 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
댓글