https://developer.android.com/guide/playcore/in-app-updates?hl=ko
인앱 업데이트 | Android 개발자 | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 인앱 업데이트 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 사용자는 기기에서 앱을 최신 상태로
developer.android.com
//참조사이트 : https://m.blog.naver.com/m950827/221817274754
public class MainActivity extends AppCompatActivity {
...
int REQUEST_CODE = 366;
...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
....
// 앱 업데이트 매니저 초기화
appUpdateManager = AppUpdateManagerFactory.create(getApplicationContext());
// 업데이트를 체크하는데 사용되는 인텐트를 리턴한다.
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
// Checks that the platform will allow the specified type of update.
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> { // appUpdateManager이 추가되는데 성공하면 발생하는 이벤트
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE // UpdateAvailability.UPDATE_AVAILABLE == 2 이면 앱 true
&& appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) { // 허용된 타입의 앱 업데이트이면 실행 (AppUpdateType.IMMEDIATE || AppUpdateType.FLEXIBLE)
// 업데이트가 가능하고, 상위 버전 코드의 앱이 존재하면 업데이트를 실행한다.
requestUpdate (appUpdateInfo);
}
});
...
}
...
// 업데이트 요청
private void requestUpdate (AppUpdateInfo appUpdateInfo) {
try {
appUpdateManager.startUpdateFlowForResult(
// 'getAppUpdateInfo()' 에 의해 리턴된 인텐트
appUpdateInfo,
// 'AppUpdateType.FLEXIBLE': 사용자에게 업데이트 여부를 물은 후 업데이트 실행 가능
// 'AppUpdateType.IMMEDIATE': 사용자가 수락해야만 하는 업데이트 창을 보여줌
AppUpdateType.IMMEDIATE,
// 현재 업데이트 요청을 만든 액티비티, 여기선 MainActivity.
this,
// onActivityResult 에서 사용될 REQUEST_CODE.
REQUEST_CODE);
}
catch (Exception e) {
e.printStackTrace();
}
}
...
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == MY_REQUEST_CODE) {
Toast myToast = Toast.makeText(this.getApplicationContext(), "MY_REQUEST_CODE", Toast.LENGTH_SHORT);
myToast.show();
// 업데이트가 성공적으로 끝나지 않은 경우
if (resultCode != RESULT_OK) {
Log.d(TAG, "Update flow failed! Result code: " + resultCode);
// 업데이트가 취소되거나 실패하면 업데이트를 다시 요청할 수 있다.,
// 업데이트 타입을 선택한다 (IMMEDIATE || FLEXIBLE).
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
// flexible한 업데이트를 위해서는 AppUpdateType.FLEXIBLE을 사용한다.
&& appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
// 업데이트를 다시 요청한다.
requestUpdate (appUpdateInfo);
}
});
}
}
}
...
// 앱이 포그라운드로 돌아오면 업데이트가 UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS 상태로 중단되지 않았는지 확인해야 합니다.
// 업데이트가 이 상태로 중단된 경우 아래와 같이 업데이트를 계속하세요.
@Override
protected void onResume() {
super.onResume();
appUpdateManager
.getAppUpdateInfo()
.addOnSuccessListener(
appUpdateInfo -> {
if (appUpdateInfo.updateAvailability()
== UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
// If an in-app update is already running, resume the update.
try {
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo,
AppUpdateType.IMMEDIATE,
this,
MY_REQUEST_CODE);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
...
}
'Android(Java)' 카테고리의 다른 글
[Java] LocationManager 위치정보 가져오기 (GPS) (0) | 2024.03.29 |
---|---|
[Java] ImageView FadeIn 효과 애니메이션 (0) | 2024.03.28 |
[Java] TextView 일부 글자만 색/크기/스타일 변경하기 (0) | 2024.03.28 |
[Java] CustomDialog 간단하게 사용하기(버튼 한개/두개) (0) | 2024.03.28 |
[Java] killProcess 앱 종료해도 다시 실행되는 문제 (0) | 2024.03.27 |