Ответ 1
Замените что-нибудь вроде:
[NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
Преобразуйте NSData
в NSString
после этого.....
Я использую этот код для покупок в приложении, взял его из учебника 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" устарел: сначала устарел в iOS 7.0
Как это исправить?
Замените что-нибудь вроде:
[NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
Преобразуйте NSData
в NSString
после этого.....
Поскольку этот вопрос технически задается вопросом о том, как следует обращаться к устаревшему атрибуту, справедливо предположить, что OP по-прежнему развертывается на версии iOS меньше 7. Поэтому вам нужно проверить наличие более нового API, а не называя это слепо:
Edit Как указано в комментариях, вы не можете использовать responsesToSelector в NSBundle, поскольку этот 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
NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
if(!receipt) {
/* No local receipt -- handle the error. */
}
NSString *jsonObjectString = [receipt base64EncodedString];