关于弃用
由于这个问题在技术上是在询问应该如何解决已弃用的属性,因此可以公平地假设 OP 仍在低于 7 的 iOS 版本上部署。因此,您需要检查更新 API 的可用性,而不是盲目地调用它:
Objective-C
编辑
正如评论中指出的那样,您不能在 NSBundle 上使用 respondsToSelector,因为该 API 在以前的 iOS 版本中是私有的
NSData *receiptData;
if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_7_0) {
receiptData = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
} else {
receiptData = transaction.transactionReceipt;
}
//now you can convert receiptData into string using whichever encoding:)
迅速
由于 Swift 只能部署在 iOS 7 及更高版本上,我们可以appStoreReceiptURL
安全地使用
if let receiptData = NSData(contentsOfURL: NSBundle.mainBundle().appStoreReceiptURL!) {
//we have a receipt
}
关于收据验证
较新的 API 收据现在包含用户执行的所有交易的列表。该文档清楚地概述了收据的外观:
这意味着如果您真的非常想要,您可以遍历收据中包含的所有项目以验证每笔交易。
有关收据验证的更多信息,您可以阅读obc.io