본문 바로가기
유니티 이야기

[Unity] 2022 Codeless 인앱 결제(IAP) Tutorial (2)

by novices 2022. 8. 30.

이전 포스트에서 코드리스 인앱 결제 관련 유니티 프로젝트 설정에 대해 작성했는데요. 이어서 UI 구성 및 IAP Catalog 및 IAP버튼 설정 방법을 알아보겠습니다. 테스트를 위한 최소의 UI인 소모성, 비소모성 버튼을 생성하고 IAP catalog에 정보를 추가하여 결재가 이루어지는지 확인합니다.

 

 

1. UI 구성 설명

테스트를 위해 소모성, 비소모성에 대한 UI를 만들었습니다. 각 항목마다 TitleText, DescriptionText, IAP버튼이 존재하고 아래 그림에 빨간색 네모로 표기된 오브젝트가 IAP버튼입니다. IAP버튼을 만들기 위해서는 (1) 번 유니티 프로젝트 설정 포스트에서 이야기했던 Purchacing Package가 설치돼 있어야 합니다. 버튼을 얻으려면 에디터의 하이어라키 > 우클릭하거나 > In-App Purchasing > IAP Button을 눌러 생성하거나 빈 오브젝트에 IAP Button 컴포넌트를 추가해도 됩니다. 

UI 게임화면 이미지에디터의 하이어라키 이미지
UI 구성 이미지

 

 

2. IAP Catalog 만들기

IAP 컴포넌트 항목의 최상단 Product ID는 Catalog에서 만든 Product 프로필을 선택할 수 있는 필드입니다.

Button Type은 Purchase, Restore 두 개의 필드로 되어있고 리스토어 버튼은 애플의 구매 복원에 사용됩니다.

OnPurchase Complete, Failed는 구매 성공, 실패 시 실행되는 콜백으로 구매 성공이나 실패 때 필요한 기능을 스크립트로 작성해서 등록해야 합니다.  마지막으로 하단의 text필드는 참조가 있을 경우 Catalog에서 작성되는 프로필의 Title, Desc, Price를 각 텍스트 컨포넌트로 할당해주는 역할을 합니다. 

 

만들어진  IAP버튼 컴포넌트 항목에서 IAP Catalog로 들어갑니다.

 

IAP Catlog 버튼 위치 이미지
IAP Catalog

 

ID에 구글 플레이 콘솔 및 애플스토어에서 생성한 인앱ID를 입력합니다. Type은 소모성 비소모성 구독형이 있고 해당되는 타입으로 변경해줍니다. Apple Configuration에서 가격을 정하고 구글도 동일한 가격으로 입력합니다. 양쪽 출시 가 아닌 단일 스토어 출시는 항목을 빼주면 됩니다. Automatically initialize Unity Game Services에 체크하고 마지막으로 Title과 Description을 작성합니다.

 

제품 ID 입력 및 가격설정 이미지제품 타이틀 및 설명 입력 이미지
인앱 카타로그 설정

 

하단의 Add Product를 눌러 광고 제거 인앱 product의 정보도 입력했습니다.

 

광고제거 인앱 Catalog 설정
광고제거 인앱 Catalog 설정

 

 

3. 스크립트 작성

설명은 주석으로 되어있고 주 된 내용은 콜백 된 함수에 해당되는 제품 ID를 확인해 해당되는 부분을 처리하는 코드입니다.

작성된 IAPManager코드를 빈 오브젝트를 생성해 컴포넌트로 추가합니다.

using UnityEngine;
using UnityEngine.Purchasing;
public class IAPManager : MonoBehaviour
{
    // IAP Catalog Product 입력한 ID를 문자열로 선언한다.
    private const string _gold1000_ID = "com.testCompany.testgame.gold1000";
    private const string _RemoveAds_ID = "com.testCompany.testgame.removeAds";

    // 구매 성공 시 실행되는 함수
    public void OnPurchaseComplate(Product product)
    {
        // 상품별 성공 시 제공하는 내역을 처리한다. 
        if(product.definition.id == _gold1000_ID)
        {
            // 금을 1000 제공한다.
            // GameManager.inst.AddGold(1000);
            Debug.Log("1000 Gold를 얻었습니다.");
        }
        else if(product.definition.id == _RemoveAds_ID)
        {
            // 광고를 제거한다.
            // GameManager.inst.AdsFlag = false;
            Debug.Log("모든 광고가 제거 되었습니다.");
        }
    }

    // 구매 실패 시 실행되는 함수
    public void OnPurchaseFailed(Product product, PurchaseFailureReason reason)
    {
        Debug.Log(product.definition.id + "가 " + reason + "의 이유로 구매실패 되었습니다.");
    }
}

 

 

4. 인앱 (IAP) 버튼 설정

Product ID를 설정하고 OnPurchase Complete에 IAPManager의 OnPurchaseComplete 함수를 연결합니다.

 

인앱버튼 프로덕트 및 성공함수 연결 이미지
인앱 버튼 설정 1

 

OnPurchase Filed에 IAPManager의 OnPurchaseFailed 함수를 연결합니다.

 

실패함수 연결 이미지
인앱 버튼 설정 2

 

테스트로 구성한 UI의 Title, Desc, Price 텍스트 컨포넌트를 IAP버튼의 해당되는 필드에 연결합니다.

 

title, desc, price 텍스트 컨포넌트 연결 이미지
인앱 버튼 설정 3

RemoveAds IAP Button도 동일하게 설정합니다.

 

 

5. 실행결과

실행결과 정상적으로 작동됩니다. 예시를 위해 별도 프로젝트에 테스트했지만 동일 방법으로 운영 중인 게임에 적용 결제 테스트까지 완료된 내용입니다. 자세한 내용은 유니티 API에서 추가로 확인 가능합니다.

 

실행 결과 gif
실행 결과

 

 

댓글