恢复应用内购买交易

Lio*_*ion 6 iphone in-app-purchase ios

这个想法是无论是下雨还是下雨,潮湿或精细,用户都必须得到他付出的全部费用.

来自Apple:

Store Kit provides built-in functionality to restore transactions for non-consumable products, auto-renewable subscriptions and free subscriptions

对于这些交易,Apple Store Kit具有良好的内置工具.我想专注于其他类型(特别是消耗品).唯一的交易信息是我们在成功购买后通过Store Kit接收的标识符和收据数据.我们的应用程序使用服务器端模型向其提供产品.但是仍然存在许多丢失购买数据的情况,例如当用户通过App Store进行购买时服务器放下,因此无法向服务器发送收据以完成验证过程.

目前的解决方法是:

  1. 服务器返回产品标识符列表
  2. 用户选择一个; app将其标识符保存在设备上(通过SQLite或Core Data).Standart Apple Store交易流程紧随其后.
  3. 如果成功,应用程序将收据数据与其设备上的标识符一起保存并发送给服务器.如果出现故障或取消,则立即从设备中删除标识符.
  4. 如果服务器的响应正常,则应用程序将从设备中删除带有收据数据的标识符.否则,它将定期向服务器发送请求,直到成功响应行为为止.

但这种方法仍然存在泄漏.例如,用户可以从设备中删除不等待交易到服务器的应用程序,因此根本不会有任何关于他的购买的证据.

你的建议?

DrC*_*DrC 3

基本规则是,在成功交付内容之前,不要在支付队列上调用 finishTransaction: 。这意味着您向验证和内容服务器发出请求,它们会返回有效的响应。只有在这些正确的响应之后,您才能调用 finishTransaction:。请注意,错误的购买收据虽然有效,但不好。你会遇到有人试图抄袭商品——不要为此失眠,但一定要进行适当的收据检查。

据我了解(来自我的非消耗品),只要您不调用 finishTransaction,商店就会继续在您的应用程序安装上重试。因此,我认为您不需要应用程序将收据保存在设备上。但是,对于消耗品,如果您希望以后能够恢复数据,服务器必须存储数据。一个重要的问题是将其存储在什么密钥下。

顺便说一句,你的第一句话绝对正确,值得失眠。