在ios中存储自动续订订阅收据的最佳方法是什么?

时间:2017-11-21 20:48:17

标签: ios in-app-purchase auto-renewing receipt-validation in-app-subscription

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

  1. 在NSUserDefaults中保存交易详细信息是个好主意 并在需要时检索细节?
  2. 将收据保存在Documents Directory中并从那里读取是否是个好主意?
  3. 查看订阅结束日期的最佳方法是什么? 我是否需要不断检查当前日期,然后与之进行比较 每次用户尝试访问时订阅的结束日期 内容?
  4. 我可以从保存的收据中获取订阅的结束日期吗?或者我是否需要联系Apple服务器以获取订阅的结束日期?
  5. 如果订阅自动续订,我如何更新收据 在指定期限之后?
  6. 我知道一些方法。但想知道最好的方法。请指导我实现上述目标的最佳步骤。谢谢。

1 个答案:

答案 0 :(得分:2)

我会尝试回答您的问题,但您可能会看到WWDC StoreKit视频,12

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

  2. 我不会保存整张收据。这将是过度的,只需提取您需要的信息并保存。始终可以从Bundle.appStoreReceiptURL访问收据,因此您无需存储收据。

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

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

  5. 当您向/verifyReceipt发送收据时,您将收到一封JSON回复,其中包含将包含最新交易的密钥latest_receipt_info。无论收据多长,这都是真的。

  6. IAP,特别是订阅不是一个简单的系统,因此我强烈建议您花些时间观看WWDC视频并阅读Apple的guides on StoreKit