- 뒤끝 SDK 버전 : 5.15.0
- 프로젝트명 : MagicCommander
- 스테이터스 코드 : public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
- 에러 코드 : 없음
- 에러 메시지 : 없음
안녕하세요. 우선 뒤끝서버 덕분에 서버 걱정 없이 개발할 수 있어서 감사합니다.
다름이 아니라,
영수증 검증 관련해서 게임을 껐다 켤 때마다
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
이 매서드가 호출되고 있는데
로그를 확인해보니
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
이 매서드 호출된 이후에 자동으로 호출되고 있는 것 같아서요.
실제 기능상으로는 아무런 문제는 없지만,
뒤끝 콘솔 ‘영수증 검증’ 탭에 실패한 기록이 계속 작성되어 보는데 불편함이 있습니다.
모든 구매항목들이 뜨는 건 아니고 이전에 구매한 적이 있는 항목만 뜨는 것 같습니다.
혹시 해결방법이 없을까 싶어서 문의드립니다.
아래는 제가 작성한 코드입니다.
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
Debug.Log("유니티 IAP 초기화 성공");
storeController = controller;
storeExtensionProvider = extensions;
}
public void OnInitializeFailed(InitializationFailureReason error)
{
Debug.LogError($"유니티 IAP 초기화 실패 {error}");
}
public void OnInitializeFailed(InitializationFailureReason error, string message)
{
Debug.LogError($"유니티 IAP 초기화 실패: {error}, 메시지: {message}");
}
//영수증 검증
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
Debug.Log("영수증 검증 시작");
string receiptJson = args.purchasedProduct.receipt;
// 일반영수증 검증 (금액을 콘솔에서 표시하고자 할 경우)
decimal iapPrice = args.purchasedProduct.metadata.localizedPrice;
string iapCurrency = args.purchasedProduct.metadata.isoCurrencyCode;
BackendReturnObject validation = Backend.Receipt.IsValidateGooglePurchase(receiptJson, "receiptDescription", iapPrice, iapCurrency);
if (validation.IsSuccess())
{
string productId = args.purchasedProduct.definition.id;
// 공통 처리
MasterAudio.PlaySound("Buy");
ClearMission();
// 제품별 처리
if (productId == ProductGem5000 || productId == ProductGem12000)
{
int gemAmount = productId == ProductGem5000 ? 5000 : 12000;
GameManager.Instance.GainGem(gemAmount);
MainUIManager.Instance.rewardPopup.SetActive(true);
MainUIManager.Instance.rewardPopup.GetComponent<RewardPopup>().SetReward(2, gemAmount);
}
else if (productId == ProductPremiumPack)
{
HandlePremiumPurchase();
}
else if (productId == ProductDailyPass)
{
HandleDailyPassPurchase();
}
else if (productId == SkinSkeleton || productId == SkinSnow || productId == SkinTerra || productId == SkinWater || productId == SkinWitch)
{
string skinName = "";
if(productId == SkinSkeleton){
skinName = "Skeleton";
}
else if(productId == SkinSnow){
skinName = "Snow";
}
else if(productId == SkinTerra){
skinName = "Terra";
}
else if(productId == SkinWater){
skinName = "Water";
}
else if(productId == SkinWitch){
skinName = "Witch";
}
HandleSkinPurchase(skinName);
}
else if (productId == ProductStarterPack)
{
HandleStarterPackPurchase();
}
else
{
Debug.Log($"인식되지 않은 제품: '{productId}'");
return PurchaseProcessingResult.Pending;
}
}
else
{
Debug.Log($"일반 영수증 검증 실패. 인식되지 않은 제품: '{args.purchasedProduct.definition.id}'");
return PurchaseProcessingResult.Pending;
}
return PurchaseProcessingResult.Complete;
}