SKDownload проблема после того, как приложение переходит в фоновый режим

В моем приложении загрузка контента, размещенного на Apple, проходит хорошо, если приложение активно. Однако, если он переходит в фоновый режим и проходит достаточно времени, когда он снова становится активным, SKDownload все еще имеет active состояние, но о прогрессе не сообщается. Я подтвердил, что транзакция еще не завершена.

Кто-нибудь знает, почему это происходит? Мое устройство подключено к сети Wi-Fi, и я мог проверить состояние загрузки, поскольку сохранил SKDownload к переменной экземпляра. Так что, если бы это была просто проблема, связанная с невозможностью получения прогресса загрузки в фоновом режиме, я все равно смог бы прочитать текущее значение из myDownload.progress, Тем не менее, прогресс в точности, как это было, и он не обновляется.

Это большая проблема для меня, потому что, как упоминалось выше, я храню SKDownload к переменной. Я делаю это для того, чтобы предотвратить повторное скачивание. Мои активы превышают 150 МБ, поэтому вполне возможно, что пользователи не оценят, сколько времени потребуется, чтобы загрузить ресурсы, и попытаются начать вторую загрузку, восстановив /"купив" элемент снова. Итак, я сохраняю текущую загрузку в переменной, и когда новая транзакция завершается, я проверяю, запущена ли уже загрузка. Это отличный дизайн, поскольку он гарантирует, что загрузка завершится в кратчайшие сроки. Единственная проблема возникает, если приложение долгое время находилось в фоновом режиме, а затем я получаю следующее состояние:

  1. Загружайте отчеты, будучи активными
  2. Соответствующая транзакция еще не завершена
  3. По какой-то причине загрузка не идет дальше

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

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

Обновление 1

Я нашел способ решить эту проблему, но для меня это выглядит как взлом:

  1. Приостановить загрузку, когда приложение переходит в фоновый режим
  2. Снова добавить обозреватель транзакций магазина (!!!) в applicationWillEnterForeground,
  3. Возобновить приостановленную загрузку

2 самая интересная часть. У меня есть синглтон, который отвечает за обработку всех связанных с магазином уведомлений. Я добавляю это как наблюдатель транзакции в didFinishLaunchingWithOptions и я удаляю его только в willTerminate, Я убедился, что синглтон такой же, как только приложение переходит в состояние переднего плана. Тем не менее, если я снова не добавлю его в качестве обозревателя магазина, загрузка не будет возобновлена. Супер интересно.

0 ответов

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