본문 바로가기
Unity

[ UNITY ] In-App Update 사용하기, 앱 자동 업데이트

by 까꿍봉봉 2023. 1. 30.
728x90
반응형

구글에 앱을 올리고 수정한 후 업데이트를 자동으로 할 수 있게 할 수 있는 방법을 찾다가

Unity에서 제공하는 SDK에서 사용하는걸 찾았다.

아무리 찾아봐도 기본 밖에 적용한 사례가 나오지 않았다.

심화 작업을 해보고 싶었는데..

 

일단 참고 사이트

https://developer.android.com/guide/playcore/in-app-updates/unity?hl=ko 

 

인앱 업데이트 지원(Unity)  |  Android 개발자  |  Android Developers

인앱 업데이트 지원(Unity) 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 가이드에서는 Unity를 사용하여 앱에서 인앱 업데이트를 지원하는 방법을 설명합

developer.android.com

 

이걸 보면서 하나씩 찾아서 해보았음.

유튜브랑 블로그 찾아보면서 했는데 심화 가정은 없더라..

그래서 이것저것 해보면서 했다.

반응형

 

Start()함수에 있는 유연한 업데이트나 즉시 업데이트를 사용하면된다.

난 다운로드 진행률을 보여주기 위해서 유연한 업데이트를 선택했다.

FlexibleAppUpdateOptions()를 사용하는데

즉시 업데이트를 사용하고 싶으면 ImmediateAppUpdateOptions()를 사용하면 된다.

	AppUpdateManager appUpdateManager;
    AppUpdateOptions appUpdateOptions;
    AppUpdateInfo appUpdateInfoResult;

    void Start()
    {
        appUpdateManager = new AppUpdateManager();  //앱매니저 정의

        //유연한 업데이트 진행
        appUpdateOptions = AppUpdateOptions.FlexibleAppUpdateOptions();
        //즉시 업데이트 진행
        //appUpdateOptions = AppUpdateOptions.ImmediateAppUpdateOptions();

        StartCoroutine(CheckForUpdate());
    }

    
    IEnumerator CheckForUpdate()
    {
        //가능한 업데이트가 있는지 확인
        PlayAsyncOperation<AppUpdateInfo, AppUpdateErrorCode> appUpdateInfoOperation = appUpdateManager.GetAppUpdateInfo();

        //업데이트 정보를 받아올대까지 기다린다.
        yield return appUpdateInfoOperation;

        if(appUpdateInfoOperation.Error.Equals(AppUpdateErrorCode.ErrorUnknown))
        {
            Debug.Log("에러가 몇개 있다.");
        }

        //업데이트 정보받기 성공
        if(appUpdateInfoOperation.IsSuccessful)
        {
            //업데이트 정보 정의
            appUpdateInfoResult = appUpdateInfoOperation.GetResult();

            if(appUpdateInfoResult.UpdateAvailability.Equals(UpdateAvailability.UpdateAvailable))
            {
                Debug.Log("업데이트가 있다.");
                StartCoroutine(StartFlexibleUpdate());
            }
        }
        else
        {
            Debug.Log("업데이트가 없다.");
        }
    }

    //즉시 업데이트
    IEnumerator StartImmediateUpdate()
    {
        //요청자의 앱 내 업데이트 흐름을 모니터링 하는데 사용할 수 있는 앱 업데이트 요청을 한다.
        var StartUpdateRequest = appUpdateManager.StartUpdate(
            appUpdateInfoResult, //PlayAsync Operation에서 반환한 결과. 결과 가져오기
            appUpdateOptions    //요청된 앱 내 업데이트 및 해당 매개 변수를 정의하는 앱 업데이트 옵션이 생성됨.
            );

        yield return StartUpdateRequest;

        //업데이트가 성공적으로 완료되면 앱이 다시 시작된다.
        //여기에 도달한다면 실패처리가 되었다는 뜻. 오류는 사용자에게 메시지 표시함.
    }

    //유연한 업데이트
    IEnumerator StartFlexibleUpdate()
    {
        //요청된 앱 내 업데이트 흐름을 모니터링하는데 사용할 수 있는 앱 업데이트 리퀘스트 요청
        var startUpdateRequest = appUpdateManager.StartUpdate(
            appUpdateInfoResult, //PlayAsync Operation에서 반환한 결과. 결과 가져오기
            appUpdateOptions    //요청된 앱 내 업데이트 및 해당 매개변수를 정의하고 앱 업데이트 옵션이 생성.
            );

        while (!startUpdateRequest.IsDone)
        {
            //여기서 다운로드 되는 진행 표시바 만들 수 있다.
            yield return null;
        }
        StartCoroutine(CompleterFlexibleUpdate());
    }

    IEnumerator CompleterFlexibleUpdate()
    {
        var result = appUpdateManager.CompleteUpdate();
        yield return result;

        //업데이트가 성공적으로 완료되면 앱이 다시 시작된다.
        //여기에 도달하면 실패로 처리. 오류는 사용자에게 메시지 표시함.
    }

 

내부 테스트를 해보면서 작업을 해봤는데.. 버전 25까지 올라갔다... 진짜 ... 인내의 끝판왕!

결국 성공했지!! 복잡한것도 싫고, 난 진행 표시바만 있으면 되니깐!!

위에 있는 코드로 하면 기본적인게 가능하다.

진행 표시바를 하고 싶으면 while()문에 슬라이더를 넣어서 사용하면된다!!

 

모두들 인내를 가지고 성공하시길~!!!

728x90
반응형

댓글