我正在从先前的iOS移植可正常运行的应用程序,但在购买新的应用程序内购买收据时遇到了麻烦。

我们现在的工作方式是从SKPaymentTransaction对象获取transactionReceipt属性,并将其发送到服务器进行验证。

从我从其他问题中可以收集到的信息来看,现在收据似乎保存在一个地方,即:

[[NSBundle mainBundle] appStoreReceiptURL];


这里有些我不明白的事情:


现在所有购买的产品都有一张收据吗?
如果是这样,此文件会增长吗?
如果我想将单一产品的单一收据发送到服务器,该怎么办?
是始终将完整文件发送到服务器的唯一方法吗?


对此感到非常困惑,任何帮助将不胜感激。

最佳答案

根据我的经验,可以通过Apple的文档进行收集。

1)所有购买的产品都有一张收据。为了执行服务器端验证,您将整个收据发送到服务器,服务器将其转发给Apple进行验证。请参阅Apple开发者论坛上的这篇文章(从评论13开始)https://devforums.apple.com/thread/193893?tstart=0

2)非消耗品将永远保留在收据中,因此肯定会越来越多。一旦完成,通过调用finishTransaction将消耗品从收据中懒散地移除。见https://devforums.apple.com/message/876265#876265

3)iOS6循环遍历updateTransactions并将单个收据发送到服务器进行验证的方式似乎与新的iOS7设计不一致。在Apple Developer论坛上的这篇文章建议您“将整个交易清单和收据一起发送到服务器。在验证收据后,交付所有产品,并完成所有交易。” https://devforums.apple.com/message/897870#897870

4)确实确实如此。

如果您认为缺少iOS7文档,可以向Apple提出错误报告

关于validation - iOS7中非消耗性产品的服务器端收据验证和transactionReceipt弃用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19158857/

10-13 06:20