iOS8 In App Purchase收据验证

Posted

技术标签:

【中文标题】iOS8 In App Purchase收据验证【英文标题】:iOS8 In App Purchase receipt verification 【发布时间】:2015-03-03 15:14:10 【问题描述】:

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

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

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”之前是否总是刷新应用收据?有没有可能它不存在或者过时了?

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

【问题讨论】:

【参考方案1】:

一句话,不;应用收据可能完全丢失,或者可能已过时且无法反映最新交易。

我相信这就是为什么 Apple 声明您应该刷新 App 收据 if validation fails on iOS。 “失败”有一个广泛的定义;它可以是上述任何验证步骤。

要查看是否是这种情况,请尝试以下测试脚本,在 iOS 8.0 上进行测试。

    开始购买,接受“确认购买”模式对话框。 在您的应用程序的事务观察者收到购买通知之前,终止您的应用程序并将其从设备中删除。仍应显示“感谢您的购买”对话框。 重新安装您的应用程序。当您添加事务观察者时,storekit 会通知它已完成的事务。 如果您的应用尝试读取应用收据,它会发现它丢失了。

【讨论】:

以上是关于iOS8 In App Purchase收据验证的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS In-App-Purchases 收据验证上返回许多交易

IOS7验证iap收据,in_app文件是啥意思?

iOS 14 In-App Purchase 请求登录/验证两次

iOS:React Native:应用内购买:收据验证

Apple 收据 - original_purchase_date 的日期早于应用程序创建

Flutter In-App-Purchase,每次重启应用如何查看是不是已购买?