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 收据验证上返回许多交易
iOS 14 In-App Purchase 请求登录/验证两次