using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Purchasing;
public class IAPManager : MonoBehaviour, IStoreListener {
public const string productIDConsumable = "consumable";
public const string productIDNonConsumable = "nonconsumable";
public const string productIDSubscription = "subscription";
//Android 상품 ID
private const string Android_dia_pack1_Id = "com.ExtremeEyes.A.A;";
private const string _Android_NonconsumableId = "com.studio.app.nonconsumable.android";
private const string _Android_SubscriptionId = "com.studio.app.subscription.android";
//iOS 상품 ID
private const string _IOS_ConsumableId = "com.studio.app.consumable.ios";
private const string _IOS_NonconsumableId = "com.studio.app.nonconsumable.ios";
private const string _IOS_SubscriptionId = "com.studio.app.subscription.ios";
private IStoreController storeController;
private IExtensionProvider storeExtensionProvider;
private void InitUnityIAP() {
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
builder.AddProduct(productIDConsumable, ProductType.Consumable, new IDs(A){
{Android_dia_pack1_Id, com.ExtremeEyes.A },
// {_IOS_ConsumableId, AppleAppStore.Name}
}
);
// builder.AddProduct(productIDNonConsumable, ProductType.NonConsumable, new IDs(){
// {_Android_NonconsumableId, com.ExtremeEyes.Flappyrun },
// {_IOS_NonconsumableId, AppleAppStore.Name}
// }
// );
// builder.AddProduct(productIDSubscription, ProductType.Subscription, new IDs(){
// {_Android_SubscriptionId, GooglePlay.Name },
// {_IOS_SubscriptionId, AppleAppStore.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 OnPurchaseFailed(Product product, PurchaseFailureReason reason) {
Debug.LogWarning($"구매 실패 - {product.definition.id}, {reason}");
}
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) {
Debug.Log($"구매 성공 - ID : {args.purchasedProduct.definition.id}");
if (args.purchasedProduct.definition.id == ProductGold) {
Debug.Log("소모품 구매 완료");
} else if (args.purchasedProduct.definition.id == ProductCharacterSkin) {
Debug.Log("비 소모품 구매 완료");
} else if (args.purchasedProduct.definition.id == ProductSubscription) {
Debug.Log("구독 서비스 구매 완료");
}
return PurchaseProcessingResult.Complete;
}
public void Purchase(string productId) {
if (!IsInitialized) {
return;
}
var product = storeController.products.WithID(productId);
if (product != null && product.availableToPurchase) {
Debug.Log($"구매 시도 - {product.definition.id}");
storeController.InitiatePurchase(product);
} else {
Debug.Log($"구매 시도 불가 - {productId}");
}
}
private void Awake() {
DontDestroyOnLoad(gameObject);
InitUnityIAP();
}
}
Assets\IAPManager.cs(5,42): error CS0535: 'IAPManager' does not implement interface member 'IStoreListener.OnInitializeFailed(InitializationFailureReason, string)'
강의 글에서 하라는 대로 코드 짰는데
저게 왜 자꾸 나오는 거죠?
chat gpt로 계속 수정 해봐도 마찬가지에요
중간에 public void OnInitializeFailed(InitializationFailureReason error) 를 public void OnInitializeFailed(InitializationFailureReason error, string value) 로 바꾸면 될 듯?
Assets\IAPManager.cs(5,42): error CS0535: 'IAPManager' does not implement interface member 'IStoreListener.OnInitializeFailed(InitializationFailureReason)' 여전히 오류가 뜨네요 ㅠㅠ
아;; 바꾸는게 아니고 public void OnInitializeFailed(InitializationFailureReason error) 는 냅두고 아예 public void OnInitializeFailed(InitializationFailureReason error, string value) 를 하나 더 맹글어야할듯
해결 되었어요 감사합니다