Ошибка NSURLSession при загрузке по WiFi: NSURLErrorDomain Code=-999

Более года назад я создал приложение, которое обеспечивает обмен фотографиями и видео для своих пользователей. Он работал без проблем, пока пару недель назад я не представил новую функцию: возможность пометить видео для загрузки только при наличии WiFi: для видео настроено использование NSURLSession с NSURLSessionConfiguration, где для параметра allowCellular установлено значение NO .

В большинстве случаев это работает нормально:

  • Я настроил видео для отправки по WiFi, когда я подключен через 3G/4G
  • Как только я подключаюсь к сети Wi-Fi, видео загружается без проблем.

Однако некоторые пользователи не загружают свои видео после подключения к WiFi. Я получил от них несколько журналов и вижу ошибку всякий раз, когда они подключаются к Wi-Fi, по какой-то причине NSURLSession делает вызов делегата:

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error

Со следующей ошибкой:

Error: Error Domain=NSURLErrorDomain Code=-999 "(null)" UserInfo={NSErrorFailingURLStringKey=https://my-videos-bucket.s3.amazonaws.com/4074196678138134606/F17F7308-2810-4325-A5AF-BB8FFC093AC6.mov, NSURLErrorBackgroundTaskCancelledReasonKey=0, NSErrorFailingURLKey=https://my-videos-bucket.s3.amazonaws.com/4074196678138134606/F17F7308-2810-4325-A5AF-BB8FFC093AC6.mov}

Любые идеи? Может проблема с сервером? Странно то, что я не могу воспроизвести его и понять причину сбоя.

Заранее спасибо!

Ze


person user361526    schedule 12.08.2016    source источник
comment
кажется, что задача отменена другой задачей. -999 для NSURLErrorCancelled.   -  person Pranjal Bikash Das    schedule 12.08.2016
comment
Отнесите свой iPhone в Starbucks и посмотрите, сможете ли вы воспроизвести проблему. Пользователи могут работать в закрытой сети.   -  person gnasher729    schedule 12.08.2016


Ответы (1)


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

Однако в случае фоновых загрузок фреймворк предоставляет немного больше информации. Вы заметите, что ключ словаря NSURLErrorBackgroundTaskCancelledReasonKey) имеет значение 0. Если вы посмотрите в документации, вы обнаружите, что это соответствует NSURLErrorCancelledReasonUserForceQuitApplication.

Другими словами, запрос был отменен, потому что пользователь явно дважды коснулся кнопки «Домой» и провел пальцем вверх, чтобы закрыть ваше приложение. В результате фоновая загрузка была автоматически отменена.

См. Справочник по классу NSURLSession для получения дополнительной информации.

person dgatwood    schedule 13.08.2016