Создание загружаемого контента для покупок в приложении 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.