web-dev-qa-db-ja.com

SKReceiptRefreshRequestとrestoreCompletedTransactions

私のアプリはサブスクリプションモデルを使用していますが、一部のユーザーがSKPaymentQueue.restoreCompletedTransactionsを介してサブスクリプションを復元できないという苦情が寄せられています。アプリを削除して、AppStoreから再ダウンロードする必要があります。

一部のユーザーだけに発生している理由はよくわかりません。1人はキャンセルしてiTunesから再アクティブ化した、もう1人は支払いの問題について教えてくれました。

では、なぜ彼らはアプリを再ダウンロードする必要があるのでしょうか?一部の情報がレシートで正しく更新されていないと推測しているので、SKReceiptRefreshRequestの代わりにrestoreCompletedTransactionsを使用するか、両方を使用することを考えていました。

誰かが2つのプロセスの違いを説明できますか?

12
the Reverend

SKReceiptRefreshRequestRestoreCompletedTransactionsの非常に単純な違いは次のとおりです。

SKReceiptRefreshRequest

レシートを更新すると、AppStoreにレシートの最新のコピーが要求されます。領収書を更新しても、新しいトランザクションは作成されません。連続して複数回更新することは避けてください。ただし、このアクションは、1回だけ更新するのと同じ結果になります。

RestoreCompletedTransactions

完了したトランザクションを復元すると、ユーザーが行った完了したトランザクションごとに新しいトランザクションが作成され、基本的にトランザクションキューオブザーバーの履歴が再生されます。トランザクションが復元されている間、アプリは独自の状態を維持して、完了したトランザクションを復元する理由と、それらを処理する必要がある方法を追跡します。複数回復元すると、完了したトランザクションごとに複数の復元されたトランザクションが作成されます。

ユーザーサブスクリプションの検証には、SKReceiptRefreshRequestと完了したトランザクションの復元の両方を使用できますが、以下の場合は、レシートを更新する代わりに、完了したトランザクションを復元するために使用する必要があります。

  • Appleがホストするコンテンツを使用する場合、完了したトランザクションを復元すると、コンテンツのダウンロードに使用するトランザクションオブジェクトがアプリに提供されます。

  • IOS 7より前のバージョンのiOSをサポートする必要があり、アプリの領収書を利用できない場合は、代わりに完了したトランザクションを復元してください。

  • アプリが更新されないサブスクリプションを使用している場合、アプリは復元プロセスを担当します。

参照:https://developer.Apple.com/library/content/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Restoring。 html#// Apple_ref/doc/uid/TP40008267-CH8-SW9

15
Sagar Thummar