【问题标题】:Why does the latest_receipt object changing every time I request it from Apple?为什么我每次向 Apple 请求时,latest_receipt 对象都会发生变化?
【发布时间】:2017-12-13 19:49:24
【问题描述】:

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

我在 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

我不确定这是否是验证订阅是否仍然有效的正确方法。

我从latest_receipt_info 获得expires_date_ms,如果它大于当前时间(以毫秒为单位),则订阅仍视为有效。

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

根据文档:

最新收据

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

【问题讨论】:

  • 我在 PROD 中遇到了这个问题,而不是在沙盒中。我在月度和年度订阅中遇到了这个问题。

标签: ios in-app-purchase in-app-subscription


【解决方案1】:

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

【讨论】:

  • 确实,这是针对沙盒的。谢谢,这可以解释。除此之外,当我将收据保存在数据库中并定期检查收据是否仍然有效(或者同时被取消)时,我的方法是否正确?每次成功检查后,我都会用传入的latest_receipt 替换现有收据,并在下一次检查中再次检查后者。
  • 我在 PRODUCTION 中遇到了这个问题,而不是在沙盒中。真实用户的每月和每年订阅都会发生这种情况。 latest_receipt 每次都与receipt_data 不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多