iOS应用内购买收据验证-如果服务器关闭,该怎么办?

时间:2018-10-01 15:45:51

标签: ios in-app-purchase

假设可以将一个简单的待办事项列表应用程序连接到Web服务帐户。该Web服务允许用户在线编辑其ToDo列表,并在不同设备上同步数据。

现在,我想在iOS上使用消耗品的应用内购买商品,以便用户购买不同的按使用付费功能。例如,“ 100条提醒推送通知”可能是一个IAP项目...

让Apple文档流通时,购买将遵循以下步骤:

  • 用户开始在应用内购买
  • 用户向App Store进行身份验证并授权购买
  • App Store完成购买(用户付费) <-从App Store的角度完成购买
  • 有关购买的通知应用程序(StoreKit,PaymentQueue,交易等)
  • 应用将收据发送到服务器以进行验证。
  • 服务器验证收据并向用户Web帐户添加“ 100条提醒推送通知”。 <-从应用程序的角度购买完成

问题:如果服务器关闭,购买会发生什么?

即使实际的购买结果(向用户帐户添加提醒)不会存储在服务器上,也不会存储在设备上,即使服务器关闭或没有Internet连接,收据验证和购买完成也会失败。

但是,从App Store的角度来看,一旦用户授权付款,购买就完成了。该应用程序确实能够完成购买并为用户带来任何收益,而不会打扰App Store。

当然,用户可能会抱怨缺少所购买的福利,但是如何处理?

使用非消耗性IAP 时,用户可以简单地恢复以前的购买,但是使用消耗性IAP 是不可能的,是吗?

如果无法从App Store恢复购买形式,唯一的解决方案是将收据存储在本地,并为用户提供以后进行验证的选项。 这是“正确”的解决方案,还是还有其他方法可以解决?

1 个答案:

答案 0 :(得分:2)

您的顺序在第3点不正确。

您的应用收到更新的交易,然后启动验证和持久购买所需的任何逻辑。应用程序完成此操作后,它将完成付款队列上的交易。届时,从tye App Store的角度看,购买已完成。

如果服务器已关闭并且无法验证收据,则应向用户提供某种形式的错误,并可能重试验证。

该交易将处于待处理状态,并在下次启动您的应用时重新呈现给您的支付队列观察者。这就是为什么您的应用在启动时首先要做的就是注册付款队列观察器对象。

当您最终能够完成收据验证并继续购买时,您就可以在付款队列上完成交易了。