SKDownload проблема после того, как приложение переходит в фоновый режим - PullRequest
0 голосов
/ 11 октября 2018

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

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

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

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

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

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

Обновление 1

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

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

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

...