본문 바로가기
개발/C#

유니티 C# 인앱결제 시스템 간단 구현 Unity IAP System

by SPNK 2024. 2. 14.
반응형
  • 코드 작성
using UnityEngine;
using UnityEngine.Purchasing;

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

    // 인앱 결제 제품의 ID
    private string productID = "your_product_id";

    void Start()
    {
        InitializePurchasing();
    }

    private void InitializePurchasing()
    {
        if (IsInitialized())
        {
            return;
        }

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

        builder.AddProduct(productID, ProductType.NonConsumable);

        UnityPurchasing.Initialize(this, builder);
    }

    private bool IsInitialized()
    {
        return storeController != null && extensionProvider != null;
    }

    public void BuyProduct()
    {
        if (IsInitialized())
        {
            Product product = storeController.products.WithID(productID);

            if (product != null && product.availableToPurchase)
            {
                storeController.InitiatePurchase(product);
            }
            else
            {
                Debug.LogError("제품을 구매할 수 없습니다.");
            }
        }
        else
        {
            Debug.LogError("Unity IAP 초기화 실패.");
        }
    }

    public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
    {
        storeController = controller;
        extensionProvider = extensions;
    }

    public void OnInitializeFailed(InitializationFailureReason error)
    {
        Debug.LogError("Unity IAP 초기화 실패: " + error);
    }

    public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
    {
        // 구매 처리 (컨텐츠 잠금 해제 등)
        Debug.Log("구매 성공: " + args.purchasedProduct.definition.id);

        // 여기에 구매한 아이템을 잠금 해제하거나 제공하는 로직을 추가할 수 있습니다.

        return PurchaseProcessingResult.Complete;
    }

    public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
    {
        Debug.LogError("구매 실패: " + product.definition.id + ", 사유: " + failureReason);
    }
}
반응형

댓글