В моем приложении загрузка контента, размещенного на Apple, проходит хорошо, если приложение активно.Однако, если он переходит в фоновый режим и проходит достаточно времени, когда он снова становится активным, SKDownload
все еще имеет состояние active
, но о прогрессе не сообщается.Я проверил, что транзакция еще не завершена.
Кто-нибудь знает, почему это происходит?Мое устройство подключено к сети Wi-Fi, и я мог проверить состояние загрузки, поскольку я сохранил SKDownload
в переменной экземпляра.Так что, если бы это была просто проблема, связанная с отсутствием процесса загрузки в фоновом режиме, я все равно мог бы прочитать текущее значение из myDownload.progress
.Тем не менее, прогресс точно такой, каким он был, и он не обновляется.
Это большая проблема для меня, потому что, как упоминалось выше, я сохраняю SKDownload
в переменной.Я делаю это для того, чтобы предотвратить запуск повторяющейся загрузки.Мои активы превышают 150 МБ, поэтому вполне возможно, что пользователи не оценят, сколько времени потребуется, чтобы загрузить ресурсы, и попытаются начать вторую загрузку, восстановив / «купив» элемент снова.Итак, я сохраняю текущую загрузку в переменной, и когда новая транзакция завершается, я проверяю, запущена ли уже загрузка.Это отличный дизайн, поскольку он гарантирует, что загрузка завершится в кратчайшие сроки.Единственная проблема возникает, если приложение долгое время находилось в фоновом режиме, а затем я получаю следующее состояние:
- Загрузка активных отчетов
- Соответствующая транзакция еще не завершена
- По какой-то причине загрузка не происходит дальше
Принимая во внимание меры безопасности, описанные выше, проблема очевидна, так как загрузка не запускается, а новая не запускается, поскольку приложение видит дубликатактивная загрузка.
Я попытался возобновить загрузку, но ничего не происходит (наверное, потому что состояние не приостановлено).
Обновление 1
Я нашел способ решить проблемуэта проблема, но для меня это выглядит как хак:
- Приостановить загрузку, когда приложение переходит в фоновый режим
- Добавить наблюдателя транзакций магазина снова (!!!) в
applicationWillEnterForeground
. - Возобновить приостановленную загрузку
2 - самая интересная часть.У меня есть синглтон, который отвечает за обработку всех связанных с магазином уведомлений.Я добавляю его в качестве наблюдателя транзакции в didFinishLaunchingWithOptions
и удаляю только в willTerminate
.Я убедился, что синглтон такой же, как только приложение переходит в состояние переднего плана.Тем не менее, если я снова не добавлю его в качестве обозревателя магазина, загрузка не возобновится.Супер интересно.