恢复应用内购买交易

时间:2012-12-18 22:01:19

标签: iphone ios in-app-purchase

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

来自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. 如果服务器的响应正常,则应用会从设备中删除包含收据数据的标识符。否则,它会定期向服务器发送请求,直到成功响应为止。
  5. 但这种做法仍有漏洞。例如,用户可以从不等待交易到服务器的设备中删除应用程序,因此根本不会有任何关于他的购买的证据。

    您的建议?

1 个答案:

答案 0 :(得分:3)

基本规则是,在成功传递内容之前,不要在支付队列上调用finishTransaction :.这意味着您向验证和内容服务器发出请求,并返回有效的响应。只有在那些正确的响应之后才调用finishTransaction:。请注意,不良购买收据有效且不好。你会让人们试图扯掉货物 - 不要因此而失眠,而是要进行适当的收据检查。

据我了解(来自我的非消耗品),只要您不调用finishTransaction,商店将继续在您的应用安装上重试它。出于这个原因,我认为您不需要您的应用程序将收据保存在设备上。但是,对于耗材,如果您希望以后能够还原数据,则服务器必须存储数据。一个非平凡的问题是存储它的关键。

顺便说一下,你的第一行是绝对正确的,值得失眠。