关于应用内订阅购买,我不太明白一件事。
我在 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
}
}
并将其发送到我的服务器进行验证(用 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 时,它实际上都会发生变化。但为什么?我还没有订阅任何新的东西,为什么最新的收据会改变?
根据文档:
最新收据
仅返回包含自动更新订阅的收据。对于 iOS 6 样式的交易收据,这是最近续订的 base-64 编码收据。对于 iOS 7 风格的应用收据,这是最新的 base-64 编码应用收据。