appStoreReceiptURL на mainBundle всегда возвращает nil

Этот метод appStoreReceiptURL является заменой устаревшего метода транзакцииReceipt на SKPaymentTransaction. И каждый говорит просто использовать этот вызов:

NSURL *theURL = [[NSBundle mainBundle] appStoreReceiptURL]; 

Это должно вернуть URL-адрес квитанции, если таковой имеется. Но для меня нет ни одного, поскольку это значение равно нулю, и насколько я могу судить, этого не должно быть. Я работаю на iOS 7 и сделал несколько покупок в приложении (песочница на устройстве). Теперь я пытаюсь добавить еще одну покупку в приложении, подписку на автоматическое продление подписки, и мне нужно заглянуть в квитанцию, чтобы получить срок действия подписки. Но я не могу пройти этот простой шаг, потому что значение всегда всегда равно нулю.

Кто-нибудь знает, почему?

2 Solutions collect form web for “appStoreReceiptURL на mainBundle всегда возвращает nil”

Немного поздно, но это может быть полезно кому-то:

 -(void) someMethod { NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL]; if ([[NSFileManager defaultManager] fileExistsAtPath:[receiptUrl path]]) { NSData *ios7ReceiptData = [NSData dataWithContentsOfURL:receiptUrl]; //Do stuff } else { NSLog(@"iOS 7 AppReceipt not found %@, refreshing...",iapID); SKReceiptRefreshRequest *refreshReceiptRequest = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:@{}]; refreshReceiptRequest.delegate = self; [refreshReceiptRequest start]; } } - (void)requestDidFinish:(SKRequest *)request { if([request isKindOfClass:[SKReceiptRefreshRequest class]]) { //SKReceiptRefreshRequest NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL]; if ([[NSFileManager defaultManager] fileExistsAtPath:[receiptUrl path]]) { NSLog(@"App Receipt exists"); //Do stuff } else { NSLog(@"Receipt request done but there is no receipt"); // This can happen if the user cancels the login screen for the store. // If we get here it means there is no receipt and an attempt to get it failed because the user cancelled the login. //[self trackFailedAttempt]; } } } 

`

Это теперь iOS 8.4 и Xcode 6.4, поэтому, возможно, история отличается, но я нахожу, что этот вызов метода всегда возвращает nil при работе в симуляторе. На реальном устройстве это работает как задокументировано Apple. Возвращается путь туда, куда предполагается сохранить квитанцию ​​приложения, – без гарантии, что там есть квитанция или что она действительная квитанция.

  • Сохранение и запоминание покупок в приложении
  • Покупка нескольких расходных материалов за раз
  • Код SKErrorDomain = 0 в приложении для покупок
  • Можно ли получить список идентификаторов продуктов App App, основанный на идентификаторе пакета приложения
  • in-app Покупка с использованием пароля старой учетной записи при восстановлении
  • Отмена процесса покупки InApp, когда приложение убито
  • Как реализовать покупку In-App с динамической ценой без использования SDK сторонних разработчиков в IOS?
  • SKPaymentTransaction: что такое транзакция?
  • paymentQueueRestoreCompletedTransactionsFinished: vs updatedTransactions:
  • Отправить в App Purchase для просмотра в первый раз
  • Индивидуальная цена покупки в приложении
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.