8

完了したトランザクションを復元しています(定期的)

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

とで

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

アプリによって作成された、復元された履歴トランザクションのリストを取得しましたが、メソッドは次のとおりです。

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue

一度も呼ばれないので、どちらを使えばいいのかな?調査を行ったところ、updatedTransactions:トランザクションの状態を確認するためにメソッドを使用する必要があることがわかりましたが、トランザクションのリストを復元した場合、それらすべてをトランザクションとして扱うことは無意味です。どちらを使うべきですか?最新paymentQueueRestoreCompletedTransactionsFinishedのものだけを提供します(つまり、サンドボックスサブスクリプションは数分で期限切れになり、テスト時に行われた履歴トランザクションの完全なリストを取得しましたupdatedTransactions)。

4

4 に答える 4

10

StoreKitの使用に関する優れたWWDCビデオがあります。それはWWDC2012セッション302です。

各購入を分離するために、updatedTransactionsメソッドは次のようになります。

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {

        for (SKPaymentTransaction *transaction in transactions) {

            switch(transaction.transactionState) {
                case SKPaymentTransactionStatePurchased:
                    // Unlock content
                    //... Don't forget to call `finishTransaction`!
                    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                    break;
                case SKPaymentTransactionStatePurchasing:
                    // Maybe show a progress bar?
                    break;
                case SKPaymentTransactionStateFailed:
                    // Handle error
                    // You must call finishTransaction here too!
                    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                    break;
                case SKPaymentTransactionStateRestored:
                    // This is the one you want ;)
                    // ...Re-unlock content...
                    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                    break;
             }
         }
}

購入が復元されていると判断したら、適切と思われるコンテンツを利用できるようにすることができます。できれば、そのswitchステートメント内から別のメソッドを呼び出し、トランザクションをパラメーターとして渡すことで、コンテンツを利用できるようにすることができます。もちろん、実装はあなた次第です。

于 2013-01-14T05:31:08.913 に答える
2
  1. [[SKPaymentQueue defaultQueue] addTransactionObserver:self]該当する場合は、電話(void)viewDidLoadまたは同等のサービスをご利用ください。
  2. 次に、を呼び出します[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]
  3. (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions(2)を通じてそれに応じて呼び出されます。

(1)のメソッドを呼び出さないと、アプリケーションは最初にトランザクションを復元するために(3)に到達することはありません。

于 2013-01-14T00:16:17.657 に答える
1

私は、paymentQueueRestoreCompletedTransactionsFinishedが呼び出されないという同じ問題を抱えていました。[設定]の[iTunes&Aooストア]にアクセスして修正し、サンドボックステストアカウントからログアウトして再試行しました。復元時に再度ログインするように求められた後、次回は期待どおりに機能しました。

于 2019-06-24T19:59:10.420 に答える
0

Apple Docsから:

paymentQueueRestoreCompletedTransactionsFinished:このメソッドは、すべての復元可能なトランザクションが支払いキューによって処理された後に呼び出されます。アプリケーションは、このメソッドで何もする必要はありません。

于 2019-09-26T15:44:03.127 に答える