iOS8 应用内购买收据验证

iOS8 In App Purchase receipt verification

我目前正在应用内购买消耗品。我已准备好代码 运行,在本地执行购买并验证收据。

这是我目前正在做的事情的伪代码:

Make purchase request
Respond to paymentQueue updatedTransactions callback
    If Transaction Success
        Validate app receipt fields locally (hash, bundle id, version)
        Validate in app purchase fields (product, qty, transactionid)
        Check transaction has not been seen before
        If Validation passes
            Complete in app purchase and top up user

由于 SKPaymentTransaction.transactionReceipt 已在 iOS8 中弃用,我正在使用应用收据进行验证。我假设在触发 updateTransactions 回调时,它与应用程序购买中的最新消耗品保持同步。

在调用'paymentQueue updatedTransactions'之前是否总是刷新应用收据?它是否有可能不存在或陈旧?

我希望能随回复下载最新的收据数据。我的测试表明情况确实如此,但我在文档中找不到任何明确说明这一点的内容。

一句话,没有;应用程序收据可能完全丢失或可能过时且未反映最新交易。

我相信这就是 Apple 声明您应该刷新 App 收据的原因 if validation fails on iOS。 'Fails' 具有广泛的定义;它可以是上述任何验证步骤。

要查看情况是否如此,请尝试以下测试脚本,在 iOS 8.0.

上测试
  1. 开始购买,接受 'confirm purchase' 模式对话框。
  2. 在您的应用程序的交易观察器被告知购买之前,终止您的应用程序并将其从设备中删除。 'thank you for your purchase' 对话框仍应显示。
  3. 重新安装您的应用。当您添加交易观察者时,storekit 会通知它有关已完成交易的信息。
  4. 如果您的应用程序尝试读取应用程序收据,它将发现它丢失了。