SKPaymentQueueを使用している場合は簡単です。サーバーから成功/失敗の検証結果を取得する「ステップ 5 」まで、トランザクションを SKPaymentQueueに保持するだけです。
ステップ 1 から 5 の間に問題が発生した場合でも、アプリは SKPaymentQueue 内のトランザクションにアクセスでき、「再処理」できます。
未完了のトランザクションの再処理は、アプリの開始時(または任意の時間間隔) に開始される可能性があります。
SKPaymentQueue をチェックして、保留中/未完了のトランザクションを取得し、サーバーに送信します (「ステップ 2」と同様)。サーバーにまだアクセスできない場合は、明らかにステップ 5 に到達しないため、キューからトランザクションを削除しません。この再処理は、次のアプリの起動時 (または次のキュー チェック時間間隔) に毎回何度も発生します。まで_満たされている。
実装
実装も簡単で、SKPaymentTransactionObserverの「トランザクション オブザーバー クラス」が必要です。
アプリの開始時に「トランザクション オブザーバー クラス」のインスタンスを作成し、次の呼び出しによって自身を登録する必要があります。
[[SKPaymentQueue defaultQueue] addTransactionObserver:self]
次に、「トランザクション オブザーバー クラス」はメソッドでトランザクションを取得します。
(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
このメソッドでは、すべての未完了のトランザクションを処理および再処理できます。
サーバーはべき等である必要があることに注意してください(つまり、既に処理されている場合は繰り返しトランザクションを処理できます) 。サーバーがステップ 2 から 4 を
処理して完了すると、アプリに成功/失敗の結果が表示されます。以下を呼び出して、そのトランザクションをキューから削除します。
[[SKPaymentQueue defaultQueue] finishTransaction: transaction]
最後に、この時点で購入したプレミアム機能をユーザーに提供します。