Создание загружаемого контента для покупок в приложении Apple только через Wi-Fi

У меня есть большая ( > 1 ГБ) покупка в приложении, которую я хочу доставить, используя загруженную Apple загрузку. Документы Apple говорят, что контент Apple, размещенный в IAP, не имеет ограничения на размер, который можно загрузить по сотовой связи. Я хотел бы иметь возможность гарантировать, что покупка разрешена только при подключении WiFi.

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

Я поднял TSI и ответ Apple: "Наши инженеры рассмотрели ваш запрос и пришли к выводу, что нет поддерживаемого способа достижения желаемой функциональности"

Кажется целесообразным использовать Reachability, чтобы проверить тип подключения перед началом загрузки и использовать делегат наблюдателя во время загрузки, чтобы убедиться телефон не переключился на сотовый.

Будет ли это работать надежно? Есть ли лучший способ сделать это?

Также с точки зрения поддержания контроля по мере продолжения загрузки, он не ясен из документов Apple, если загруженная Apple загрузка, которая работает в фоновом режиме, находится в моем приложении, или это происходит из процесса. Другими словами, если мое приложение прекращено, можно ли гарантировать, что загрузка будет остановлена ​​или продолжит работу за пределами моего приложения?

Обновление:. С учетом некоторого опыта, вопрос несколько спорный. Для непрерывной загрузки данных требуется, чтобы телефон имел подключение WiFi и внешнее питание. Без них загрузка немного приостанавливается после того, как экран отключится - управление питанием телефона, я думаю. Кроме того, загрузка с помощью IAP не работает, она продолжает даже аварийные ситуации с вашим приложением (явное убийство приложения останавливает загрузку, хотя). Когда ваше приложение перезапустится, делегаты StoreKit вызывают для завершения загрузки и покупки.

Ответ 1

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

Что касается загрузки in-process и выделенного процесса, я думаю, что это происходит в процессе. Взглянув на API, нам сообщают очереди SKDownload объектов только тогда, когда состояние транзакции SKPaymentTransactionStatePurchased, но нет API, где мы можем получить все транзакции с покупным состоянием и в настоящее время загружать в порядке очереди (например, у нас есть новый API NSURLSession, где один из режимов обрабатывает загрузки во внешнем демоне). Это и некоторый опыт работы с приложениями, которые разбились точно при попытке загрузки, заставляют меня думать, что он находится в процессе. В этих приложениях, которые разбились, мне пришлось восстановить покупки для загрузки, чтобы начать заново, что совместимо с открытым API в StoreKit.


Другое предложение состоит в том, что если вы могли бы разместить контент самостоятельно, вы могли бы использовать новый API NSURLSession от Apple, где вы можете прямо сказать, что он загружает только через WiFi.