Как получить SKDownload уже купленного контента

Стандарт в процессе покупки приложения, когда размещается контент:

  • сделать сделку
  • когда транзакция переходит в состояние "куплено", загрузите SKDownload и начните загрузку
  • после завершения загрузки мы можем объявить транзакцию как "завершенную"
  • Это отлично. Представьте, что мы хотим восстановить все приобретенное содержимое, потому что мы удаляем и переустанавливаем наше приложение или просто потому, что мы установили его на другом устройстве. Теперь, и это подтверждается сеансом WWDC 2012 на эту тему, когда вы восстанавливаете все покупки, вы получаете полный список содержимого для восстановления, но, вероятно, вы не хотите загружать все из них. В таком случае вы должны предложить пользователю выбрать, какой контент загрузить, а затем поставить SKDownload выбранного продукта в очередь; После завершения загрузки и успешной установки содержимого вы можете объявить транзакцию завершенной. Вместо этого видео сеанса не говорит о том, что вы должны делать с отклоненными или отложенными загрузками. Насколько я знаю, нет способа сохранить где-нибудь SKDownload и извлечь его позже, и нет никакого API, чтобы спросить у iTunes что-то вроде этого "дайте мне SKDownload этого уже купленного продукта". Так что, по моему мнению, есть два варианта обхода этого случая:

  • Вы попросите восстановить не купленный материал снова; это не элегантно, но работает
  • вы начинаете процедуру, а затем приостанавливаете ее; это будет возобновлено позже. Но у этого решения есть несколько недостатков: у вас нет контроля над тем, как система управляет загрузкой SKDown, и оно может быть отменено через определенное время. Я никогда не пробовал это решение.
  • Кто-то еще сталкивался с этой проблемой и нашел лучшее решение? имеет ли смысл открывать запрос на улучшение в Apple?

    1 ответ

    Я всегда делаю это так, как вы предлагаете, и просто "перекупляю" купленные товары, чтобы они проходили через нормальный поток покупок. Вы не можете пометить транзакцию как завершенную, пока не завершите загрузку. Поэтому, если вы приостановите его и приложение закроется, когда ваше приложение будет запущено снова, очередь отключится и попытается завершить покупку, что снова запустит вашу логику загрузки. Это кажется более раздражающим, поскольку у пользователя постоянно появляется всплывающее окно, когда я открываю приложение, чтобы завершить покупку.

    SKDownload документы говорят;

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

    Другие вопросы по тегам