iOS 上的应用内购买可以在后端服务器上完成吗?

can In-App-Purchase on iOS be done on backend server?

我已经阅读了很多关于 iOS 的应用程序内购买的内容,包括苹果的所有文档,但没有找到任何关于从后端服务器进行购买的内容。

困扰我的一个难题是当用户在 iOS 上购买并且完成后,应用程序收到收据的情况。当用户失去互联网连接时,它会将其发送到后端服务器以进行验证和自定义逻辑。接下来发生的事情是用户看到一个苹果的对话框说 "Purchase completed" 而商品还没有到达应用程序(在我的例子中它是可消费的虚拟货币)。

所以我在想一个干净的解决方案是只与后端服务器通信以进行购买,如果互联网连接丢失,则不会完成购买(可以通过几个通信步骤完成)。

遇到我上面描述的情况,人们会怎么做?向用户显示一个对话框说 "Communicating with server" 只是为了让他在重试将收据发送到后端服务器时看到任何进展?

我想要一些关于此的最佳实践技巧。

一些信息:我的后端服务器是 .NET 4.5 WCF web 服务

答案很简单:没有。
这是因为购买是使用您的 Apple ID 进行的,Apple 不希望您共享这些凭据。
您应该自己关心 communicating/validating 收据时可能出错的所有事情。
还请记住,用户可以恢复他以前的购买交易,因为您的购买是消耗品类型,您应该注意使已消耗的收据无效。
您可以实现这样的系统:

  • 用户购买
  • 交易成功完成
  • 对收据的引用存储在队列中以供验证
  • 客户端发送回执进行验证
  • 一旦通过验证,参考将从队列中删除并激活购买

如果客户端由于错误或超时而从未收到经过验证的响应,您可以重试该操作或保留在队列中以进行进一步检查以通知用户存在错误。