15

我正在从以前的 iOS 移植一个工作应用程序,并且在使用新的应用内购买收据时遇到问题。

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

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

[[NSBundle mainBundle] appStoreReceiptURL];

这里有几件事我不明白:

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

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

4

1 回答 1

18

根据我通过 Apple 的文档收集到的信息。

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

2)非消耗品将永远保留在收据中,所以是的,它会不断增长。一旦通过调用 finishTransaction 完成,消耗品就会从收据中懒惰地删除。见https://devforums.apple.com/message/876265#876265

3) iOS6 循环通过 updatedTransactions 并将单个收据发送到您的服务器进行验证的方式似乎与新的 iOS7 设计不一致。Apple 开发者论坛上的这篇帖子建议您“将整个交易列表与收据一起发送到您的服务器。收据验证后,交付所有产品,并完成所有交易。https://devforums.apple .com/message/897870#897870

4) 似乎确实如此。

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

于 2013-10-21T08:16:42.987 回答