IAPに関するAppleドキュメントに記載されているようなアプリ内支払いを実装しましたが、サンドボックスモードで試してみると、 'transactionState'は決してSKPaymentTransactionStatePurchasedに変更されません。 (それは永久にSKPaymentTransactionStatePurchasingにとどまっています。)SKPaymentTransaction transactionStateは購入後SKPaymentTransactionStatePurchasedになりません
何が間違っているのか分かりませんか?
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
NSLog(@"%ld", transaction.transactionState);
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self restoreTransaction:transaction];
default:
break;
}
}
}
- (void)completeTransaction:(SKPaymentTransaction *)transaction
{
[self recordTransaction:transaction];
[self provideContent:transaction.payment.productIdentifier];
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
- (void)failedTransaction:(SKPaymentTransaction *)transaction
{
if (transaction.error.code != SKErrorPaymentCancelled) {
[NSAlert alertWithError:transaction.error];
}
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
- (void)restoreTransaction:(SKPaymentTransaction *)transaction
{
[self recordTransaction:transaction];
[self provideContent:transaction.originalTransaction.payment.productIdentifier];
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
- (void)recordTransaction:(SKPaymentTransaction *)transaction
{
NSLog(@"Record Transaction...");
// ToDo: Implement 'recordTransaction'.
}
- (void)provideContent:(NSString *)productIdentifier
{
NSLog(@"Provide Content");
// ToDo: Implement 'provideContent'.
}
あなたの問題はあなたが投稿したコードではないので、詳細な情報なしで何が間違っているかを知ることは不可能です。 – rdelmar
SKPaymentは既にAppStoreによって処理されているので、他のコードの影響はないはずです。 – miho