我正在使用此代码进行应用内购买,它取自 RaywernderLich 的教程。
// Encode the receiptData for the itms receipt verification POST request.
NSString *jsonObjectString = [self encodeBase64:(uint8_t *)transaction.transactionReceipt.bytes
length:transaction.transactionReceipt.length];
现在 Xcode 正在说
'transactionReceipt' is deprecated: first deprecated in iOS 7.0
如何解决?
最佳答案
关于弃用
由于这个问题在技术上是在询问应该如何解决已弃用的属性,因此可以公平地假设 OP 仍在低于 7 的 iOS 版本上部署。因此,您需要检查更新的 API 的可用性,而不是盲目调用它:
Objective-C
编辑 正如评论中所指出的,您不能在 NSBundle 上使用 respondsToSelector,因为该 API 在以前的 iOS 版本中是私有(private)的
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
由于 Swift 只能部署在 iOS 7 及更高版本上,我们可以安全地使用 appStoreReceiptURL
if let receiptData = NSData(contentsOfURL: NSBundle.mainBundle().appStoreReceiptURL!) {
//we have a receipt
}
关于收据验证
较新的 API 收据现在包含用户执行的所有交易的列表。 documentation清楚地勾勒出收据的样子:
这意味着如果您真的非常想这样做,您可以遍历收据中包含的所有项目以针对每笔交易进行验证。
有关收据验证的更多信息,您可以阅读 obc.io
关于iphone - 弃用的 TransactionReceipt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19682663/