アプリ内サブスクリプションの購入に関して、よくわからないことが 1 つあります。
次のように 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
サブスクリプションがまだ有効かどうかを確認する正しい方法かどうかはわかりません。
expires_date_ms
fromを取得し、latest_receipt_info
それが現在の時間 (ミリ秒単位) よりも大きい場合、サブスクリプションはまだ有効であると見なされます。
しかし、私が気付いたのは、latest_receipt
先ほど送信したものと等しいはずの別の が、API を呼び出すたびに実際に変化していることです。しかし、なぜ?新しいものを購読していないのに、最新の領収書が変更されているのはなぜですか?
ドキュメントによると:
latest_receipt
自動更新サブスクリプションを含む領収書に対してのみ返されます。iOS 6 スタイルのトランザクション レシートの場合、これは最新の更新の base-64 でエンコードされたレシートです。iOS 7 スタイルのアプリ レシートの場合、これは base-64 でエンコードされた最新のアプリ レシートです。