アプリ内購入を使用して iPhone および iPad 用のアプリを作成していますが、iPhone で問題が発生しています。購入可能なアイテムの 1 つをタップすると、SKPayment
が に追加されるSKPaymentQueue
と、ViewController はそれ自体を閉じ、支払いは未処理のままになります。[[SKPaymentQueue defaultQueue] removeTransactionObserver:self]
に追加するまで、これはクラッシュを引き起こしていましたdealloc
。
アプリを再起動すると、期待どおりに支払いが処理され、購入したコンテンツがユーザーに付与されます。完全に終了して再起動しない限り、支払いは処理されません。
支払いを追加する方法は次のとおりです。
- (void)purchaseConnector: (NSIndexPath *)indexPath
{
SKProduct *selectedProduct = productDetailsList[indexPath.row];
SKPayment *payment = [SKPayment paymentWithProduct:selectedProduct];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
その後、ここに入ります:
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self restoreTransaction:transaction];
break;
default:
break;
}
}
}
トランザクションの状態はSKPaymentTransactionStatePurchasing
そのまま継続し、その後 ViewController が終了し、「アプリ内購入の確認」UIAlert
がポップアップします。
繰り返しますが、iPad ではすべてが期待どおりに完全に機能します。これらの問題は iPhone を使用している場合にのみ発生します。
編集
明確にしたいのですが、問題はストアのViewControllerが閉じていることです。私はそれを自分で却下することは決してなく、そのコマンドを受け取った場所をステップスルーできないようです。閉じるのは iPad ではなく、iPhone だけです。