문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.
- 뒤끝 SDK 버전 :
- 프로젝트명 :
- 스테이터스 코드 :
- 에러 코드 :
- 에러 메시지 : NullReferenceException: Object reference not set to an instance of an object.
인앱결제 작업중 오류문의 드립니다.
구매버튼에 IAP Button 에 Get100Gold(), Get100Soul() 을 각각 할당해 주었습니다.
뒤끝에 연결전에는 테스트결제 완료후 재화가 잘들어왔지만 지금은 결제가 완료 되지만 에러메세지와 함께 재화가 지급이 안됩니다…
그리고 정상적으로 결제가 완료되면(테스트결제포함) 콘솔에서 영수증이 확인이 되는것인가요…?
작성된 코드는 아래와 같이 했습니다.
private static IStoreController storeController;
private static IExtensionProvider extensionProvider;
public BackEndGameInfo backEndGameInfo;
public const string productId1 = "100gold";
public const string productId5 = "100soul";
void Start()
{
if(storeController == null)
{
InitializePurchasing();
}
}
private void InitializePurchasing()
{
if (IsInitialized()) return;
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
builder.AddProduct(productId1, ProductType.Consumable);
builder.AddProduct(productId2, ProductType.Consumable);
UnityPurchasing.Initialize((IStoreListener)this, builder);
}
private bool IsInitialized()
{
return storeController != null && extensionProvider != null;
}
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
/*
뒤끝 영수증 검증 처리
*/
BackendReturnObject validation = Backend.Receipt.IsValidateGooglePurchase(args.purchasedProduct.receipt, "receiptDescription", false);
// 영수증 검증에 성공한 경우
if (validation.IsSuccess())
{
// 구매 성공한 제품에 대한 id 체크하여 그에 맞는 보상
//100골드
else if (String.Equals(args.purchasedProduct.definition.id, productId1))
{
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
GameManager.GoldAmount += 100;
PanelMain.Instance.UpdateCoin();
GameManager.Instance.SavePlayerPrefs();
backEndGameInfo.OnClickGameInfoUpdate();
print("100골드 결제 성공");
}
//100소울
else if (String.Equals(args.purchasedProduct.definition.id, productId5))
{
Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
GameManager.SoulAmount += 100;
PanelMain.Instance.UpdateCoin();
GameManager.Instance.SavePlayerPrefs();
backEndGameInfo.OnClickGameInfoUpdate();
print("100소울 결제 성공");
}
}
// 영수증 검증에 실패한 경우
else
{
// Or ... an unknown product has been purchased by this user. Fill in additional products here....
Debug.Log(string.Format("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id));
}
// Return a flag indicating whether this product has completely been received, or if the application needs
// to be reminded of this purchase at next app launch. Use PurchaseProcessingResult.Pending when still
// saving purchased products to the cloud, and when that save is delayed.
return PurchaseProcessingResult.Complete;
}
public ProductCollection products => storeController.products;
//100골드
public void Get100Gold()
{
Product p = storeController.products.WithID(productId1);
storeController.InitiatePurchase(p);
}
//100소울
public void Get100Soul()
{
Product p = storeController.products.WithID(productId5);
storeController.InitiatePurchase(p);
public void Failed()
{
print("인앱실패");
}