0

アプリ内購入と購入の復元機能を備えた iOS アプリがあります。

サンドボックス モードでアプリをテストしていたとき、常にアラートを受け取り、iTunes アカウントのパスワードを要求していました (UserName は既に入力されています)。

今、私のアプリはライブで、インストールしてアプリ内購入を行ってから購入を復元しました。そのため、サンドボックス モードではありませんが、iTunes アカウントのパスワードを要求するアラートが引き続き表示されます。

以下は、以前に購入した ProductIds を提供するコードです。次に、これらの productIds をデリゲートに渡し、それらのステータスを「購入」から「購入済み」に変更します

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
    //NSLog(@"Restored Transactions are once again in Queue for purchasing %@",[queue transactions]);

    NSMutableArray *purchasedItemIDs = [[NSMutableArray alloc] init];
    //NSLog(@"received restored transactions: %i", queue.transactions.count);

    for (SKPaymentTransaction *transaction in queue.transactions)
    {
        NSString *productID = transaction.payment.productIdentifier;
        [purchasedItemIDs addObject:productID];
       // NSLog (@"product id is %@" , productID);
    }

    if ( mDelegate != nil && [mDelegate respondsToSelector:@selector(purchasedProductList:)] ){
        [mDelegate purchasedProductList:purchasedItemIDs];
    }

    [purchasedItemIDs release];
}

これを回避する方法はありますか?

ありがとう

4

1 に答える 1

0

finishTransaction:が呼び出されることを確認する必要があります。常に呼び出す必要があり、トランザクションで複数回呼び出すことは問題ありません。呼び出されない場合、トランザクションはキューに残り、アプリは後でもう一度処理を試みます。トランザクションがどのようにキューに追加されたかは関係ありません。トランザクションが処理されたら、「終了」する必要があります。

元のトランザクションの効果的なラッパーである新しいトランザクションが作成され、それらを「終了」する必要があることに注意してください。復元ドキュメントから:

支払いキューは、復元可能な以前に完了したトランザクションごとに新しいトランザクションを配信します。各トランザクションには、元のトランザクションのコピーが含まれています。

于 2013-07-18T08:59:25.440 に答える