Пустое приложение AppStore в приложении

В приложении мне нужно реализовать автоматические возобновляемые покупки подписки. Поскольку я понимаю документацию, я должен проверить получение AppStore при запуске приложения, а затем проверить его с моим сервером. В моем коде я делаю следующее, чтобы получить квитанцию:

NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; NSData *receipt = [NSData dataWithContentsOfURL:receiptURL]; 

Иногда receipt становится нулевым. Например:

  • Я запустил приложение и совершил покупку. После этого код выше возвращает непустую receipt .
  • Приложение остановлено с помощью XCode.
  • При следующем приходе к запуску приложения нет.

Я не понимаю, почему это происходит. receiptURL указывает на файл с квитанцией, но [NSData dataWithContentsOfURL:receiptURL] возвращает ноль.

Если я запрашиваю обновление квитанции, тогда приложение отображает диалог ввода учетных данных Itunes. Это плохо, потому что этот диалог появится при запуске приложения, и это неожиданное поведение.

Я делаю что-то неправильно? Или, может быть, это конкретный случай с песочницей?

В производстве всегда будет квитанция (даже если приложение бесплатное), которое может содержать дополнительную покупку, если вы купили что-то или восстановили из уже приобретенного товара.
В тестовой среде, пока вы не купите что-либо, квитанция будет равна nil , если вы хотите протестировать случай, близкий к произведению, сначала попробуйте восстановить (теперь у вас будет квитанция) и сделайте то, что вам нужно.

Здесь предлагается, чтобы ваша процедура оплаты взламывалась, вызывая SKPaymentTransactionStatePurchased независимо. Перед принятием любых квитанций вам необходимо подтвердить получение на сервере.
Здесь вы можете найти отличное описание квитанций и хакеров.