1

我正在我的应用程序中实施自动续订订阅。我能够完美地完成所有购买和修复。但是我对保存收据详细信息的最佳方法感到有些震惊。以下是我的问题。

  1. 将事务详细信息保存在 NSUserDefaults 中并在需要时检索详细信息是个好主意吗?
  2. 将收据保存在 Documents Directory 中并从那里读取它是一个好主意吗?
  3. 检查订阅结束日期的最佳方法是什么?每次用户尝试访问内容时,我是否需要不断检查当前日期,然后与订阅的结束日期进行比较?
  4. 我可以从保存的收据中获取订阅的结束日期,还是需要联系 Apple 服务器以获取订阅的结束日期?
  5. 订阅在指定期限后自动续订后,如何更新收据?

我知道一些方法。但想知道最好的方法。请指导我实现上述目标的最佳步骤。谢谢你。

4

1 回答 1

3

我会尝试回答您的问题,但您可能会从观看 WWDC StoreKit 视频12中受益。

  1. 我会将购买状态存储在您存储所有其他客户端状态的同一位置。

  2. 我不会保存整个收据。这将是矫枉过正,只需提取您需要的信息并保存它。收据总是可以从那里获得,Bundle.appStoreReceiptURL所以你不需要存储它。

  3. 对于订阅,您需要使用 AppleverifyReceipt端点验证收据,并找到expires_date给定 IAP 产品标识符的最新收据。存储这个日期(在默认值或其他地方)并使用它来计算用户的状态。

  4. 获取最新过期的正确方法是将收据发送到您自己的服务器,存储它,并定期根据verifyReceipt端点检查它并从latest_receipt_info响应中的字段更新过期。一个不太好的解决方案是确保您始终SKPaymentQueue在应用程序中设置观察者,因为当定期订阅更新时,队列中将出现新事务。如果你处理这个,读取新的收据数据并完成交易,你不需要一个完整的后端,但是,如果不独立于你的后端验证收据,它将容易受到 IAP 破解者的攻击。

  5. 当您向您发送收据时,/verifyReceipt您将收到一个 JSON 响应,其中包含一个包含latest_receipt_info最新交易的密钥。无论收据有多旧,这都是正确的。

IAP,尤其是订阅不是一个简单的系统,因此我强烈建议您花时间观看 WWDC 视频并阅读 Apple在 StoreKit 上的指南

于 2017-11-21T21:54:28.690 回答