-1

私は自分のアプリケーションでAuto Renewingサブスクリプションを実装しています。私はすべての購入と復元を完全に完了することができます。しかし、私は、領収書の詳細を保存するための最良の方法が何かに打たれています。以下は私の質問です。iosで定期購読の自動更新を保存する最善の方法は何ですか?

  1. NSUserDefaults に取引の詳細を保存し、必要なときに詳細を取得することをお勧めしますか?
  2. 領収書をDocuments Directoryに保存し、そこから読み取ることをお勧めしますか?
  3. サブスクリプションの終了日を確認する最良の方法は何ですか? コンテンツを にアクセスしようとするたびに、現在の日付を常に確認してから、 と契約の終了日を比較する必要がありますか?
  4. 保存された領収書からサブスクリプションの終了日を取得できますか?サブスクリプションの終了日を取得するにはAppleサーバーに問い合わせる必要がありますか?
  5. 指定した期間の後に定期購読が自動更新されると、私は領収書を更新できますか?

私はいくつかのアプローチを知っています。しかし、最良のアプローチを知りたい。上記の目標を達成するための最善の手順を私に指示してください。ありがとうございました。

答えて

2

あなたの質問にお答えしようとしますが、おそらくWWDC StoreKitのビデオ、1および2を見て恩恵を受けるでしょう。

  1. 私はあなたが他のすべてのクライアント側の状態を格納している同じ場所で購入状態を保存するようにします。

  2. 私は領収書全体を保存しません。これは過度のもので、必要な情報を抽出して保存するだけです。領収書はいつでもBundle.appStoreReceiptURLからアクセスできますので、保管する必要はありません。

  3. サブスクリプションの場合、アップルのverifyReceiptエンドポイントで領収書を確認し、指定されたIAP製品IDの最新expires_dateを見つける必要があります。この日付を(デフォルトまたは他の場所に)保存し、その日付を使用してユーザーのステータスを計算します。

  4. 最新の有効期限を取得するための適切な方法は対応してlatest_receipt_infoフィールドから有効期限を、独自のサーバーに領収書を送って、それを保存し、定期的にverifyReceiptエンドポイントに対してそれをチェックし、更新することです。あまり良い解決策は、定期購読が更新されたときに新しいトランザクションがキューに表示されるため、常にSKPaymentQueueオブザーバ設定をアプリに必ず入れておくことです。これを処理して新しい領収書データを読み、トランザクションを完了すると、バックエンド全体を必要としませんが、領収書をバックエンドから独立して検証することなく、IAPクラッカーに脆弱になります。

  5. 領収書を/verifyReceiptに送信すると、最新のトランザクションを持つlatest_receipt_infoというキーを含むJSON応答が届きます。これは領収書がどれほど古いかに関係なく真実になります。

IAPと特にサブスクリプション私は非常にWWDCのビデオを視聴すると、Appleのguides on StoreKitを読むために時間を割いてお勧めしますので、シンプルなシステムではありません。

関連する問題