[Unity] IAP(In App Purchasing) 모듈을 사용하여 Google Play 인앱 결제 기능 구현

 Unity에서는 IAP모듈로 간단하게 인앱 결제 기능을 구현 할 수 있다.


1.    Unity 내부의 IAP 패키지를 설치한다.

       Window - Package Manager - Packages: Unity Registry - In App Purchasing - Install










2.    설치가 완료되면 결제 정보를 설정한다.

        1) Project Settings 를 눌러 설정 창으로 이동 한다.

        창을 종료 했을 경우 Services - In-App Purchasing - Configure... 이동









        2) 13세 미만 대상에게 결제를 허용할 거면 'Yes', 아니면 'No'를 선택한다.









        3) 패키지를 설정을 활성화 시켜주고 License Key를 입력한다.














        4) License Key는 Google Play Console 사이트에서 가져 올 수 있다.
        Google Play Console - 수익 창출 설정 - 라이선스













3.    스크립트 작성
        InitUnityIAP() : 결제 모듈 초기화, UnityPruchasing.Initialize() : 초기화 프로세스를 시작, 리스너 구현 및 구성 정보 제공
        OnInitializeFailed() 초기화 실패 시 호출
        OnInitialized() 초기화 성공 시 호출

        Purchase() : 구매 시도, storeController.InitiatePurchase() : 구매 진행
        OnPurchaseFailed() : 구매 실패 시 호출
        ProcessPurchase() 구매 성공 시 호출

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Purchasing;

public class IAPManager : MonoBehaviour, IStoreListener
{
private IStoreController storeController;
private IExtensionProvider storeExtensionProvider;

private static IAPManager instance;

private string[] itemList = {"item-01", "item-02", "item-03", "item-04", "item-05"};

private void InitUnityIAP()
{
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());

builder.AddProduct(itemRemoveAdsId, ProductType.NonConsumable, new IDs(){{itemRemoveAdsId, GooglePlay.Name}});

foreach (string id in itemList)
{
builder.AddProduct(id, ProductType.NonConsumable, new IDs(){{id, GooglePlay.Name}});
}

UnityPurchasing.Initialize(this, builder);
}

public void OnInitialized(IStoreController controller, IExtensionProvider extension)
{
Debug.Log("유니티 IAP 초기화 성공");
storeController = controller;
storeExtensionProvider = extension;
}

public void OnInitializeFailed(InitializationFailureReason error)
{
Debug.LogError($"유니티 IAP 초기화 실패 {error}");
}

public void OnInitializeFailed(InitializationFailureReason error, string message)
{
Debug.LogError($"유니티 IAP 초기화 실패 {error} {message}");
}

public void OnPurchaseFailed(Product product, PurchaseFailureReason reason)
{
Debug.LogWarning($"구매 실패 - {product.definition.id}, {reason}");
}

public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
var product = args.purchasedProduct;
string productId = product.definition.id;

Debug.Log($"구매 성공 - ID : {product.definition.id}");

return PurchaseProcessingResult.Complete;
}

public void Purchase(string productId)
{
var product = storeController.products.WithID(productId);
if (product != null && product.availableToPurchase) {
Debug.Log($"구매 시도 - {product.definition.id}");
storeController.InitiatePurchase(product);
} else {
Debug.Log($"구매 시도 불가 - {productId}");
}
}
public static IAPManager Instance {
get {
if (instance != null) {
return instance;
}

instance = FindObjectOfType<IAPManager>();

if (instance == null) {
instance = new GameObject("IAP Manager").AddComponent<IAPManager>();
}

return instance;
}
}

private void Awake()
{
if (instance != null && instance != this) {
Destroy(gameObject);
return;
}

DontDestroyOnLoad(gameObject);
InitUnityIAP();
}
}




4.    구매 버튼 연동
       ex)
       void OnClick() {
           IAPManager.instance.Purchase("item-01");
       }

댓글

이 블로그의 인기 게시물

Google Play Stroe 출시 리젝 "발견된 문제: 부적절한 광고 정책 위반" 해결 방법

[Unity] Google Mobile Ads SDK 활용하여 광고 삽입하기