3

关于应用内订阅购买,我不太明白一件事。

我在 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_msfrom latest_receipt_info,如果它大于当前时间(以毫秒为单位),那么订阅仍然有效。

然而,我注意到的是,latest_receipt应该与我刚刚发送的那个相同,每次调用 API 时,它实际上都会发生变化。但为什么?我还没有订阅任何新的东西,为什么最新的收据会改变?

根据文档:

最新收据

仅返回包含自动更新订阅的收据。对于 iOS 6 样式的交易收据,这是最近续订的 base-64 编码收据。对于 iOS 7 风格的应用收据,这是最新的 base-64 编码应用收据。

4

1 回答 1

0

如果这违反沙盒,则订阅会在预定义的时间段内自动续订。请参阅: https ://help.apple.com/app-store-connect/#/dev7e89e149d

于 2017-12-13T21:36:36.867 回答