2012-08-31 3 views
1

신청서에 인앱 구매에 대한 추가 영수증 확인을 구현했습니다 (영감을 얻은 https://developer.apple.com/library/ios/#releasenotes/StoreKit/IAP_ReceiptValidation/_index.html). 내가 SKPaymentTransactionStatePurchased을 얻을 후 그래서, 나는이 유효성 검사를 수행하고, 성공에, 나는 게임의 새로운 콘텐츠를 잠금을 해제하고, 마지막으로 내가 확인 과정을 완료 할 수없는 경우 어떻게됩니까iOS 인앱 미완료 구매

[[SKPaymentQueue defaultQueue] finishTransaction:myTransaction]; 

로 거래를 마무리 말 때문에 인터넷 연결 실패 또는 사용자가 확인 프로세스 중에 응용 프로그램을 종료 한 경우 이 경우 콘텐츠를 잠금 해제하지 않고 거래를 완료하지 않습니다. 그리고 나는 그것이 오히려 논리적이라고 생각합니다.

그러나 "미완료 트랜잭션"상태에서 종료 된 응용 프로그램을 다시 시작하고 인앱 구매를 시도 할 때 transaction.error.code == SKErrorPaymentCancelled로 SKPaymentTransactionStateFailed 상태가되었습니다.

"이 항목을 이미 구입했지만 아직로드되지 않았습니다. 지금로드하려면"확인 "을 누르십시오."

"확인"을 누르면 콜백 호출이 없어서 콘텐츠를 잠금 해제하지 않았습니다.

내 질문은 : 1) 미완료 상태로 트랜잭션을 남겨 두어도 괜찮습니까 (확인할 수없는 경우)? 2) 어떻게 복원합니까? 어쩌면 내가 "당신은 이미 구입했습니다 ..."메시지 박스와 함께 콜백을 놓치고 있을까요?

P. 내 인앱 구매는 '소모품'입니다. 사용할 수 없으므로

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 
+0

무엇 당신은 소모품 제품을 제공하고있다? –

답변

2

좋아, 해결했습니다. 필수적인 일은 "UI 화면 구매"가 아니라 App Delegate에서 지불 대기열을 청취하는 것입니다. 즉,

[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

내 사용자 정의 구매 화면의있는 viewDidLoad에
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

하지

에 있어야합니다.

위대한 설명은 여기에서 찾을 수 있습니다 : When should i validate in-app purchase transaction receipt?