在 ios 中存储自动续订订阅收据的最佳方式是什么?
What is the best way of storing auto renewing subscription receipts in ios?
我正在我的应用程序中实现自动续订订阅。我能够完美地完成所有的购买和修复。但我对保存收据详细信息的最佳方式感到震惊。以下是我的问题。
- 将交易细节保存在 NSUserDefaults 中是个好主意吗
并在需要时检索详细信息?
- 将收据保存在文档目录中并从那里读取是个好主意吗?
- 查看订阅结束日期的最佳方式是什么?
我是否需要不断检查当前日期然后与
每次用户尝试访问时订阅的结束日期
内容?
- 我可以从保存的收据中获取订阅的结束日期吗?或者我需要联系 Apple 服务器才能获取订阅的结束日期吗?
- 自动续订后如何更新我的收据
在指定时间段后?
我知道一些方法。但想知道最好的方法。请指导我实现上述目标的最佳步骤。谢谢。
我会尽力回答您的问题,但您可能会从观看 WWDC StoreKit 视频中受益,1 and 2。
我会将购买状态存储在您存储所有其他客户端状态的同一位置。
我不会保存整个收据。这太过分了,只需提取您需要的信息并保存即可。收据始终可以从 Bundle.appStoreReceiptURL
访问,因此您无需存储它。
对于订阅,您需要使用 Apple 的 verifyReceipt
端点验证收据,并找到给定 IAP 产品标识符的最新 expires_date
。存储此日期(在默认值或其他地方)并使用它来计算用户的状态。
获取最新过期时间的正确方法是将收据发送到您自己的服务器,存储它,并定期检查 verifyReceipt
端点并从 latest_receipt_info
响应中的字段。一个不太好的解决方案是确保您的应用程序中始终有一个 SKPaymentQueue
观察者设置,因为当定期订阅更新时,新事务将出现在队列中。如果你处理这个,读取新的收据数据,并完成交易,你不需要一个完整的后端,但是,如果不独立于你的后端验证收据,它将容易受到 IAP 破解者的攻击。
当您向 /verifyReceipt
发送收据时,您将收到一个 JSON 响应,其中包含一个密钥 latest_receipt_info
,其中包含最近的交易。无论收据有多久,都是如此。
IAP,尤其是订阅并不是一个简单的系统,因此我强烈建议您花时间观看 WWDC 视频并阅读 Apple 的 guides on StoreKit。
我正在我的应用程序中实现自动续订订阅。我能够完美地完成所有的购买和修复。但我对保存收据详细信息的最佳方式感到震惊。以下是我的问题。
- 将交易细节保存在 NSUserDefaults 中是个好主意吗 并在需要时检索详细信息?
- 将收据保存在文档目录中并从那里读取是个好主意吗?
- 查看订阅结束日期的最佳方式是什么? 我是否需要不断检查当前日期然后与 每次用户尝试访问时订阅的结束日期 内容?
- 我可以从保存的收据中获取订阅的结束日期吗?或者我需要联系 Apple 服务器才能获取订阅的结束日期吗?
- 自动续订后如何更新我的收据 在指定时间段后?
我知道一些方法。但想知道最好的方法。请指导我实现上述目标的最佳步骤。谢谢。
我会尽力回答您的问题,但您可能会从观看 WWDC StoreKit 视频中受益,1 and 2。
我会将购买状态存储在您存储所有其他客户端状态的同一位置。
我不会保存整个收据。这太过分了,只需提取您需要的信息并保存即可。收据始终可以从
Bundle.appStoreReceiptURL
访问,因此您无需存储它。对于订阅,您需要使用 Apple 的
verifyReceipt
端点验证收据,并找到给定 IAP 产品标识符的最新expires_date
。存储此日期(在默认值或其他地方)并使用它来计算用户的状态。获取最新过期时间的正确方法是将收据发送到您自己的服务器,存储它,并定期检查
verifyReceipt
端点并从latest_receipt_info
响应中的字段。一个不太好的解决方案是确保您的应用程序中始终有一个SKPaymentQueue
观察者设置,因为当定期订阅更新时,新事务将出现在队列中。如果你处理这个,读取新的收据数据,并完成交易,你不需要一个完整的后端,但是,如果不独立于你的后端验证收据,它将容易受到 IAP 破解者的攻击。当您向
/verifyReceipt
发送收据时,您将收到一个 JSON 响应,其中包含一个密钥latest_receipt_info
,其中包含最近的交易。无论收据有多久,都是如此。
IAP,尤其是订阅并不是一个简单的系统,因此我强烈建议您花时间观看 WWDC 视频并阅读 Apple 的 guides on StoreKit。