在购买应用程序内订阅时,有一点我不太明白。
我在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
获取latest_receipt_info
,如果它大于当前时间(以毫秒为单位),则订阅仍然有效。
然而我注意到的是,单独的latest_receipt
,应该等于我刚发送的那个,实际上每次调用API时都会改变。但为什么?我没有订阅任何新的,为什么最新的收据会改变?
根据文件:
latest_receipt
仅对包含自动续订订阅的收据返回。 对于iOS 6样式的交易收据,这是base-64编码 最近续订的收据。对于iOS 7样式的应用程序收据, 这是最新的base-64编码应用收据。
答案 0 :(得分:0)