1

アプリ内購入を使用して 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 だけです。

4

1 に答える 1

0

あなたのコードはうまく見えます。

何かを見逃した場合に備えて、これを見てください。

于 2013-03-27T16:39:29.060 に答える