Google Play Store – 인앱 결제(IAP) 구현

서비스 활성화

IAP 서비스 설치

  1. 서비스 구현에 앞서, Unity 에서, IAP (In App Purchase) 기능을 활성화 한다.
  2. Windows > General > Services 메뉴로 접근
  3. Game Economy > In App Purchasing 을 선택하여 Install 을 진행한다.

Adaptive Performance 설치

IAP를 설치하고, 서비스를 활성화 하게 되면, 필수적으로 Adaptive Performance 모듈을 필요로 하게 되며 해당 모듈이 설치되어 있지 않으면, 빌드 과정에서 에러를 발생하게 된다.

아래 과정을 거쳐 해당 모듈도 설치를 진행한다.

  1. IAP 와 동일하게, Windows > General > Services 메뉴에서.
  2. All 탭을 선택한 후, Packages > Adaptive Performance 메뉴로 이동하여
  3. 해당 모듈을 설치하거나, Unlock 을 하여 활성화 해 준다.

Adaptive Performance – Samsung Android Provider 활성화

Adaptive Performance 가 활성화 되면, Samsung Android Provider도 활성화 시켜 줘야 한다.

  1. Edit > Project Settings 로 이동
  2. Adaptive Performance 메뉴로 이동하여, Android 탭에서, Samsung Android Provider 를 체크하여 활성화 함

Android 환경 설정

Adaptive Performance 를 사용하기 위해서는,

  1. Android OS: 7.0 이상 (Project Settings > Players >
  2. Scripting Backend: IL2CPP 로 설정되어 있어야 함

Allow downloads over HTTP 설정

Purchase 라이브러리 활성화 하는 과정 중에 HTTP로 라이브러리를 다운로드 하는 경우가 발생하므로, 에러를 방지하기 위해 해당 옵션을 Always allowed로 설정

프로젝트 서비스 설정

  1. 서비스를 활성화 하고, Edit > Project Settings 창을 연다.
  2. Services > In-App Purchasing 메뉴로 접근한다. (만약 해당 메뉴가 보이지 않는다면, 서비스 활성화를 통해 IAP 모듈을 설치를 다시 진행한다.)

Purchases 활성화

In-App Purchases 메뉴 우측의 활성화 Toggle Button을 클릭하여 모듈을 활성화 한다.

License key 입력

In-App Purchases 활성화 창에서, 하단 Receipt Obfuscator 부분에 라이선스 키를 입력

라이선스 키는 Play Store Console 의 Play를 통한 수익 창출 > 수익 창출 설정 메뉴 하단의 라이선스 에서 확인할 수 있다.

만약 해당 컨트롤을 통해 등록되지 않을 경우, Unity Cloud 를 통해 등록을 시도하고, 다시 시도함

구매 처리 클래스 구현

구매 처리 클래스 구현

구매 처리 클래스는 IStoreListener를 상속받는 클래스를 생성함

  1. IStoreController와 IExtensionProvider를 내부 변수로 생성

생성자

생성자 에서는, 구매될 제품의 정보를 구현한다.

var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());

builder.AddProduct(“제품명”, ProductType.Consumable, new IDs

{

        {“제품명_구글버전”, GooglePlay.Name},

        {“제품명_맥버전”, MacAppStore.Name}

}

UnityPurchsing.Initialize(this, builder);

OnInitialized 메소드 (IStoreListener)

해당 메소드에서는, 내부 변수들을 초기화 한다.

public void OnInitialized(IStoreController controller, IExtensionProvider extensions) {

    this.controller = controller;

    this.extensions = extensions;

}

OnIntializeFailed 메소드 구현 (IStoreListener)

초기화 실패에 대한 처리 메소드 구현

public void OnInitializeFailed(InitializationFailureReason error) {

    … 에러 처리

}

public void OnInitializeFailed(InitializationFailureReason error, string message) {

    … 에러 처리

}

PrucessPurchase 메소드 구현 (IStoreListener)

구매 처리 메소드로 구매 결과를 리턴

public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e) {

    // product Id

    string productId = e.purchasedProduct.definition.id;

    return PurchaseProcessingResult.Complete;

}

OnPurchaseFailed 메소드 구현 (IStoreListener)

구매 실패에 대한 처리 메소드 구현

public void OnPurchaseFailed(Product I, PurchaseFailureReason p) {

    … 에러 처리

}

Store 에 상품 등록

각 Store 상품 등록 절차에 맞춰 상품을 등록함

또한 등록된 아이디는 생성자 부분에 등록해 주어야 함

구매 처리 메소드 구현

public void Purchase(string productId) {

    Product product = controller.products.WithID(productId);

    if (product != null && product.availableToPurchase) {

        controller.InitiatePurchase(product);

    }

    else {

        … 구매 상품이 없음에 대한 에러 처리

    }

}

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다