using UnityEngine;
using UnityEngine.Purchasing;
public class IAPManager : MonoBehaviour, IStoreListener
{
[Header("Product ID")]
public readonly string gold500_id = "gold500";
public readonly string gold1000_id = "com.games.srpg.gold1000";
[Header("Cache")]
private IStoreController storeController; // 구매 과정을 제어하는 함수 제공자
private IExtensionProvider storeExtensionProvider; // 여러 플랫폼을 위한 확장 처리 제공자
private void Start()
{
InitUnityIAP(); // Start 문에서 초기화 필수
}
/* Unity IAP를 초기화하는 함수 */
private void InitUnityIAP()
{
ConfigurationBuilder builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
/* 구글 플레이 상품들 추가 */
builder.AddProduct(gold500_id, ProductType.Consumable);
builder.AddProduct(gold1000_id, ProductType.Consumable);
UnityPurchasing.Initialize(this, builder);
}
/* 구매하는 함수 */
public void Purchase(string productId)
{
Product product = storeController.products.WithID(productId); // 상품 정의
if (product != null && product.availableToPurchase) // 상품이 존재하면서 구매 가능하면
{
storeController.InitiatePurchase(product); // 구매가 가능하면 진행
}
else // 상품이 존재하지 않거나 구매 불가능하면
{
Debug.Log("상품이 없거나 현재 구매가 불가능합니다");
}
}
#region Interface
/* 초기화 성공 시 실행되는 함수 */
public void OnInitialized(IStoreController controller, IExtensionProvider extension)
{
Debug.Log("초기화에 성공했습니다");
storeController = controller;
storeExtensionProvider = extension;
}
/* 초기화 실패 시 실행되는 함수 */
public void OnInitializeFailed(InitializationFailureReason error)
{
Debug.Log("초기화에 실패했습니다");
}
public void OnInitializeFailed(InitializationFailureReason error, string message)
{
Debug.Log($"초기화에 실패했습니다. 이유: {error.ToString()}. 메시지: {message}");
}
/* 구매에 실패했을 때 실행되는 함수 */
public void OnPurchaseFailed(Product product, PurchaseFailureReason reason)
{
Debug.Log("구매에 실패했습니다");
}
/* 구매를 처리하는 함수 */
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
Debug.Log("구매에 성공했습니다");
if (args.purchasedProduct.definition.id == gold500_id)
{
/* test_id 구매 처리 */
point.gold += 500;
}
else if (args.purchasedProduct.definition.id == gold1000_id)
{
point.gold += 1000;
}
return PurchaseProcessingResult.Complete;
}
#endregion
}
댓글 0