4

問題: 私が呼び出すと、空のトランザクション配列で[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];オブザーバーに戻ります。しかし、私は非消耗品のアプリ内paymentQueueRestoreCompletedTransactionsFinished: SKPaymentQueueを購入しました。

アプリがさまざまな州からの購入を復元する方法をテストしています。

再現する簡単な手順:

  1. 支払いを追加して購入を完了します。キューはトランザクションを返すSKPaymentTransactionStatePurchasedため、アプリは機能を有効にし、トランザクションをキューでファイナライズします。
  2. 再購入できるように、購入に関する情報を削除します。(ユーザーがアプリを再インストールしたか、別のデバイスでアプリの使用を開始したと想像してください)
  3. もう一度アプリ内購入をお試しください。「これは既に購入済みです。[OK] をタップして、もう一度無料でダウンロードしてください。」を受け取ります。[OK] を押すと、キューからSKPaymentTransactionStatePurchasedトランザクションが返されるため、アプリは機能を有効にし、キュー内のトランザクションを終了します。
  4. 購入に関する情報を再度削除します。
  5. もう一度アプリ内購入をお試しください。「このアプリ内購入は既に購入していますが、ダウンロードされていません。」というメッセージが表示されます。OK ボタンは 1 つしかなく、それを押す前に state のトランザクションを受け取りますSKPaymentTransactionStateFailed。アプリはトランザクションを終了しますが、トランザクションが失敗した場合、機能は有効になりません。
  6. 最後に、 で完了したトランザクションの復元を試み[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];ます。paymentQueueRestoreCompletedTransactionsFinished: SKPaymentQueueそして、空のtransactions配列でオブザーバーに戻ります。

Apple Sandbox サーバーで何かが壊れているように感じます。トランザクションを正しく復元できません。それとも私は何か間違ったことをしていますか?

4

1 に答える 1

2

ステップ 3 で購入したので、その購入を復元する必要はありません。

ステップ 2 と 4 は、ユーザーがアプリを再インストールするのと同じではありません。アプリが起動して実行されているため、SKPayment がサーバーの負荷を軽減するために何かを行う可能性があるためです。アプリを削除してインストールし、restoreCompletedTransactionsすぐに使用して購入を復元することをお勧めします。


私の古い答え:

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queueすべての復元可能なトランザクションが支払いキューによって処理された後に呼び出されます。復元プロセスが完了したことを通知するだけです。

復元可能な購入ごとに が呼び出され、その中でそれぞれに- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions対処する必要があります。transactiontransactionstransaction.transactionStateSKPaymentTransactionStateRestored

于 2012-07-26T09:01:22.530 に答える