web-dev-qa-db-ja.com

自動更新可能なサブスクリプションの更新を検出して確認するにはどうすればよいですか?

そのため、サンドボックスで5分程度に相当する1か月の期間でアプリの自動更新可能なサブスクリプションを設定しました。サブスクライブしているクライアントアプリで、レシートをサーバーに送信します。レシートが検証され、このユーザーがサブスクリプションを持っていることをデータベースに記録します。

私の質問は、このサブスクリプションが更新されているかどうかを確認するにはどうすればよいですか?ドキュメントを読みましたが、どうすればよいかわかりません。

これが私が今のところいるところです:

  1. サーバーに送信される最初の領収書は、ステータス0で確認されます。また、latest_receiptを取得します。これは、データベース内で最も古いレシートに置き換えます。
  2. latest_receiptを確認しようとした6分後、ステータス21006(有効期限が切れた領収書)が表示されます。
   { receipt: 
       { original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles',
         unique_identifier: '------------',
         original_transaction_id: '----------',
         expires_date: '1376129825000',
         transaction_id: '------------',
         quantity: '1',
         product_id: 'subscription',
         item_id: '--------',
         bid: 'com.--------',
         unique_vendor_identifier: '---------',
         web_order_line_item_id: '---------',
         bvrs: '2.0',
         expires_date_formatted: '2013-08-10 10:17:05 Etc/GMT',
         purchase_date: '2013-08-10 10:12:05 Etc/GMT',
         purchase_date_ms: '1376129525000',
         expires_date_formatted_pst: '2013-08-10 03:17:05 America/Los_Angeles',
         purchase_date_pst: '2013-08-10 03:12:05 America/Los_Angeles',
         original_purchase_date: '2013-08-06 18:58:04 Etc/GMT',
         original_purchase_date_ms: '1375815484000' },
      latest_expired_receipt_info: 
       { original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles',
         unique_identifier: '-------',
         original_transaction_id: '-',
         expires_date: '1376129825000',
         transaction_id: '-',
         quantity: '1',
         product_id: 'subscription',
         item_id: '-',
         bid: 'com.-',
         unique_vendor_identifier: '--',
         web_order_line_item_id: '-',
         bvrs: '2.0',
         expires_date_formatted: '2013-08-10 10:17:05 Etc/GMT',
         purchase_date: '2013-08-10 10:12:05 Etc/GMT',
         purchase_date_ms: '1376129525000',
         expires_date_formatted_pst: '2013-08-10 03:17:05 America/Los_Angeles',
         purchase_date_pst: '2013-08-10 03:12:05 America/Los_Angeles',
         original_purchase_date: '2013-08-06 18:58:04 Etc/GMT',
         original_purchase_date_ms: '1375815484000' },
      status: 21006 }

配列の2番目の要素は以前はlatest_receipt_infoでしたが、現在はlatest_EXPIRED_receipt_infoになっています。ドキュメントの内容は次のとおりです。

Receive_dataフィールドに加えて、応答には2つの新しいフィールドも含まれる場合があります。 ユーザーのサブスクリプションがアクティブで更新された場合サーバーがApp Storeに送信した受信後に行われたトランザクションによって、latest_receiptフィールドにはbase-64エンコードが含まれますこのサブスクリプションの最後の更新の領収書この新しいレシートのデコードされたデータはlatest_expired_receipt_infoフィールドにも提供されます。サーバーはこの新しいレシートを使用して、最新の更新の記録を維持できます。

したがって、サーバーが最後にチェックしてからサブが更新されている場合、更新のためにデコードされたレシートはlatest_expired_receipt_infoにあるはずです。そのオブジェクトでは、expires_dateは元の領収書のexpires_dateと同じです。

なんてこったい?サブがアクティブかどうかを確認したいだけです。誰かが簡単な言葉でそれを行う方法を説明できますか?

ありがとうございました!

28
Nikolay Dyankov

私の経験。常に最初の領収書をAppleのサーバーに送信するとします。

いずれの場合も、status(コメントなし)とreceipt(送信した領収書に関する情報)の少なくとも2つのフィールドを持つJSONを取得します。

それに加えて:

1)サブスクリプションがまだアクティブの場合、さらにlatest_receipt(base64でエンコードされた文字列)とlatest_receipt_info(そのレシートに関する情報)を取得します。

2)サブスクリプションがすでに期限切れの場合、さらにlatest_expired_receipt_info(最後に更新されたレシートに関する情報)を取得します。はい、base64でエンコードされた文字列ではなく、それに関する情報のみを取得します。

そして、はい、AFAIK、それはどこにも文書化されていません。お役に立てば幸いです。

30
Alexandr Paliy