본문 바로가기

[unity] 구글플레이 인앱 업데이트 및 인앱 리뷰 연동 클래스

앤디가이 2022. 5. 19.

구글 플레이 API 중 Unity에서 사용하기 유용한 Play In-App Update와 Play In-App Review 클래스를 묶어 매니저 클래스를 만들어 보자.

 

1.  Play In-App 사용 이유

  - 구글에서 제공하는 Play In-App 라이브러리 중 Billing 이나 Play Asset Delivery 같은 api 도 있지만, 유니티에서 제공하는 인앱 결제 라이브러리나 addresable 같은 파워풀한 기능들이 있으니, 따로 추가할 필요는 없어 보인다.

 - Unity에서 사용할만한 Play In-App 은 Update와 Review가 유용해보인다.

 - Play In-App Update : 버전 코드가 올라간 앱이 플레이스토어에 출시되면, 앱에서 자동으로 사용자에게 앱 업데이트를 알려주고, 업데이트를 진행할 수 있게 한다. ( 기존 플레이스토어에 따로 접속하여 앱 업데이트하는 과정이 없어진다)

 - Play In-App Review : 앱 사용 중에 팝업식으로 별점을 줄 수 있다. 다양한 씬 환경에서 호출이 가능하므로, 좋은 별점을 받기 위한 환경을 만들기 좋다.

 

 

2.  Play In-App 적용 방법

  - Play In-App Update와Play In-App Review 추가를 위해 구글 개발자 사이트에 들어가 보면, 항목별로 unity package 파일을 제공한다.

https://developers.google.com/unity/packages?hl=ko#play_in-app_update

 

Explore Google packages for Unity  |  Google Developers

Explore Google packages for Unity Google’s official packages for Unity extend the default capabilities of Unity, enabling you to optimize game performance, reach new users, understand user behavior, and more. Advertising Tools to generate revenue from yo

developers.google.com

  - 각 기능 별 패키지가 다르니 잘 확인하고 다운로드하자!

  - Play In-App Review는 기존에 별점을 주기 위해서는 다음과 같은 함수를 사용해서 앱에서 브라우저로 플레이스토어로 이동했었다.

Application.OpenURL("https://play.google.com/store/apps/details?id=패키지명");​

 

  - 하지만 인앱 리뷰를 사용하면, 앱 사용 중에 팝업식으로 별점을 줄 수 있어서 사용자에게 이질감 없이 리뷰를 할 수 있게 해 준다.

  - 리뷰가 중요한 게 앱 순위 노출 등에 상당한 영향을 주기 때문에 플레이스토어 앱 오픈 시 해당 기능을 사용하면 상당히 유용해진다.

 

  - 패키지를 설치한 다음에 아래와 같은 GooglePlayManager.cs 매니저 클래스를 하나 만들어 준다.

  - 작성 코드는 아래와 같다.

using UnityEngine;
using Google.Play.Review;
using Cysharp.Threading.Tasks;
using Google.Play.Common;
using Google.Play.AppUpdate;
using System;

public class GooglePlayManager : MonoBehaviour
{
    public static GooglePlayManager Instance { get; private set; }

    ReviewManager _reviewManager = null;
    AppUpdateManager appUpdateManager = null;

    private const string REVIEW_URL = "https://play.google.com/store/apps/details?id=패키지명";

    public void Awake()
    {
        Instance = this;
    }
    public void OnDestroy()
    {
        Instance = null;
    }

    /// <summary>
    /// 인앱 리뷰 호출 함수.
    /// </summary>
    public void LaunchReview()
    {
        try
        {
            _reviewManager = new ReviewManager();
            var playReviewInfoAsyncOperation = _reviewManager.RequestReviewFlow();

            playReviewInfoAsyncOperation.Completed += playReviewInfoAsync =>
            {
                if (playReviewInfoAsync.Error == ReviewErrorCode.NoError)
                {
                    var playReviewInfo = playReviewInfoAsync.GetResult();
                    if (playReviewInfo == null)
                    {
                        //null일 경우 브라우저로 리뷰페이지로 강제 이동.
                        OpenUrl();
                    }
                    else
                    {
                        //인앱리뷰 실행.
                        _reviewManager.LaunchReviewFlow(playReviewInfo);
                    }
                }
                else
                {
                    OpenUrl();
                }
            };
        }
        catch(Exception e)
        {
            OpenUrl();
            Debug.Log(e.Message);
        }
    }



    /// <summary>
    /// 인앱 업데이트 호출 함수.
    /// </summary>
    /// <returns></returns>
    public async UniTask UpdateApp()
    {
        try
        {
            appUpdateManager = new AppUpdateManager();

            PlayAsyncOperation<AppUpdateInfo, AppUpdateErrorCode> appUpdateInfoOperation =  appUpdateManager.GetAppUpdateInfo();
            await appUpdateInfoOperation;

            if (appUpdateInfoOperation.IsSuccessful)
            {
                var appUpdateInfoResult = appUpdateInfoOperation.GetResult();
                var appUpdateOptions = AppUpdateOptions.ImmediateAppUpdateOptions();
                var startUpdateRequest = appUpdateManager.StartUpdate(appUpdateInfoResult, appUpdateOptions);

                await startUpdateRequest;
            }
            else
            {
                Debug.Log(appUpdateInfoOperation.Error);
            }
        }
        catch(Exception e){Debug.Log(e.Message);}
    }

    public void OpenUrl()
    {
        Application.OpenURL(REVIEW_URL);
    }

}

 

3.  Play In-App 호출 방법

  - 인앱 리 뷰 호출 방법 코드는 아래와 같다.

GooglePlayManager.Instance?.LaunchReview();

  - 인앱 리뷰는 앱이나 게임에서 사용자가 성취감을 얻었을 때 호출해주면 별점이 높게 나올 수 있다고 하니. 적용 시 이러한 부분도 잘 고려해야 하겠다.

  - 인앱 업데이트 호출 방법 코드는 아래와 같다.

if(GooglePlayManager.Instance != null)
    await GooglePlayManager.Instance.UpdateApp();

  - 인앱 업데이트는 앱 시작하는 인트로 화면부에 적용해주는 게 좋다. async 함수에서 호출해줘야 한다.

 

댓글