2016-08-15 2 views
0

У приложения есть много задач, когда приложение находится в фоновом состоянии, в основном работает с Bluetooth-ключами и получает/передает данные на сервер. Иногда, когда приложение в фоновом состоянии отправляет запрос, система «замораживает» этот запрос. И после запуска приложения, система «замораживается», и у нас естьЗамораживание http-запросов в фоновом состоянии

Error Domain=kCFErrorDomainCFNetwork Code=-1001 "The request timed out. 

App использовать последний AFNetworking 3.1.0 на данный момент, и помощник BFTask.

Для получения более подробной информации. Представьте, пользователь использует приложение по какой-то причине, после того, как приложение переходит в фоновое состояние (пользователь нажимает кнопку дома или блокировку), приложение обычно продолжает работать в фоновом режиме. Система или пользователь могут убить приложение. Приложение может проснуться после некоторого взаимодействия с пользователем (через геолокационные службы, геообслуживание) в момент пробуждения, приложение перезапускает и отправляет запрос на разрывание, проверяя пользователя (авторизация, получает новый токен и т. Д.). На данный момент мы можем увидеть в журналах:

> Request method: POST url: https://******/v1/account/token headers: { 
    UserName = "***@***.com"; 
    "grant_type" = password; 
    password = **** 
} at time: 2016-08-15 15:30:45 +0000 

код:

if ([request.method isEqualToString:@"GET"]) { 
      return [manager GET:request.url parameters:request.params progress:nil success:^(NSURLSessionTask *operation, id responseObject) { 

      } failure:^(NSURLSessionTask *operation, NSError *error) { 

        processError(operation, error); 
       } 
      }]; 

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

error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x156d8ce10 
{Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" 
UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=https://******/v1/account/token, NSErrorFailingURLKey=https://******/v1/account/token, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=The request timed out.} 
at time: 2016-08-15 15:46:28 +0000 

Разница во времени около 16 минут, когда пользователь снова запускает приложение. И это может быть в другой части http-запросов

Вопрос в том, почему iOS заморозит запросы в фоновом режиме и как исправить это.

+0

Привет, мы видели эту проблему. 1. Используете ли вы симулятор для запуска этой программы? 2. Не могли бы вы попытаться переключиться на другую сеть и повторить попытку? 3. При использовании симулятора - iOS Simulator -> Сбросить содержимое и настройки –

+0

@AmodGokhale, это все на реальном устройстве, с Wi-Fi или сотовой сетью –

+0

выглядит похоже - https://github.com/AFNetworking/AFNetworking/issues/3569. В нашем случае мы обработали исключение с типом исключения –

ответ

0

Через некоторое время с различными экспериментами с сетью, наконец, я нашел проблему. После диагностики CFNetwork мы можем получить дополнительную информацию обо всех запросах в приложении. И CFNetwork получает ошибку не -1001, вместо этого все ошибки отмечаются как Code = -1005 «null», но ошибка -1005 - «Сетевое соединение было потеряно». Я не знаю, почему AFNetworking получил эту ошибку, но это имеет смысл. Проблема начинается, когда мы подключаемся к Wi-Fi или 3G/4G и не подключаемся к Интернету (только локально), и на данный момент приложение пытается делать запросы, ошибка CFNetwork alert -1005 в данный момент, но AFNetworking возвращает ошибку с - 1001. Это вопрос моего вопроса.

В этот момент у меня нет изящного решения для этого, перед каждым запросом, пытающимся выполнить ping-хост, и если у нас есть ответ, попросите его. Может быть, ты лучше знаешь?

+0

Мое приложение отклонилось с **. Истекло время ожидания запроса ** на ipad при просмотре магазина приложений. Каковы средства **, когда мы подключались к Wi-Fi или 3G/4G и не имели подключения к Интернету **? –

+0

@LeiKan, это означает, что устройство подключено к Wi-Fi-маршрутизатору, но маршрутизатор не имеет wan-соединения. –

Смежные вопросы