アプリ内サブスクリプションを購入する際に私が理解していないことが1つあります。アップルからリクエストするたびにlatest_receiptオブジェクトが変更されるのはなぜですか?
私はこのようなのiOSクライアント上の領収書取得:
private func loadReceipt() -> Data? {
guard let url = Bundle.main.appStoreReceiptURL else {
return nil
}
do {
let receipt = try Data(contentsOf: url)
return receipt
} catch {
print("Error loading receipt data: \(error.localizedDescription)")
return nil
}
}
そして、私のサーバー(書かれたn個のPython)への検証のためにそれを送信します。
def verify_receipt(self, receipt):
r = requests.post(config.APPLE_STORE_URL, json=receipt)
request_date_ms = DateUtils.generate_ms_from_current_time()
for item in r.json()['latest_receipt_info']:
expires_date_ms = int(item['expires_date_ms'])
if expires_date_ms > request_date_ms:
return True
return False
サブスクリプションがまだ有効かどうかを確認する正しい方法であるかどうかはわかりません。
私はlatest_receipt_info
からexpires_date_ms
を取得します。現在の時刻がミリ秒単位で表示されている場合は、サブスクリプションの有効期間はまだ有効です。
しかし、私が気づいたのは、ちょうど私が送ったものと等しいはずの別のlatest_receipt
が実際にAPIを呼び出すたびに変更されていることです。しかし、なぜ?私は何か新しいものを購読していません、なぜ最新のレシートが変わっていますか?ドキュメントによると
:
latest_receipt
のみ自動再生可能なサブスクリプションを含む領収書について返さ。 iOS 6スタイルのトランザクションの領収書の場合、これは最新の更新のベースコードである の領収書です。 iOS 7スタイルのアプリの領収書の場合、 これは最新のBase-64でエンコードされたアプリの領収書です。
実際、これはサンドボックスに対するものです。ありがとう、それはそれを説明することができます。それ以外の場合は、レシートをデータベースに保存し、領収書がまだ有効かどうか(またはその間にキャンセルされた)定期的にチェックすると、私のアプローチは正しいですか?チェックが成功するたびに、既存の領収書を受信した 'latest_receipt'で置き換え、次のチェックで後者を再度チェックします。 – Houman