У меня есть приложение, которое отправляет данные на сервер, пока приложение находится в фоновом режиме. Вот код отвечает за отправки данных:Данные не отправляются с фона через 3G
-(bool) sendStats: (MCStatsSender*) val{
if(![self checkInternet]){ //Using Reachability here
return false;
}
NSDictionary *inputData = [NSDictionary dictionaryWithObjectsAndKeys:
self.propertyA.value, "key1",
val.data, "key2",
nil];
[myNetworkManager doRequest:[myRequestManager createWithStringAndDictionary:MY_URL Data:inputData handler:myHandler user:val]];
return true;
}
Так inputData
простой словарь со строками.
Метод doRequest
основан на NSURLSession и в основном выглядит следующим образом:
-(void) doRequest: (MCRequest*) request{
[tasks addObject:request];
if(m_session == nil){
NSURLSessionConfiguration* config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:[NSString stringWithFormat:@"key-%lu",reqid]];
m_session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
}
NSURLSessionDataTask* task = [m_session dataTaskWithRequest:request.generatedRequest];
request.reqId = task.taskIdentifier;
[task resume];
}
Как я уже говорил, все работает через Wi-Fi, приложение переходит в фоновом режиме, и через несколько минут, пользовательское устройство bluetooth отправляет некоторые данные и пробуждает приложение из приостановленного режима. После того, как данные были получены приложением iOS, он не может отправить его на сервер, если устройство подключено через 3G. Я уверен, что данные, отправленные через Bluetooth, получены, потому что они хранятся в локальной базе данных.
Также есть еще один важный факт. Если приложение запускается через Xcode, даже если устройство подключено через 3G, приложение отправит данные из фона. Чтобы сделать это, я запустил приложение, а затем нажмите кнопку «Домой», чтобы поместить его в фон.
Не знаете, в чем разница и почему приложение действует по-разному, когда оно подключено кабелем к Mac и почему данные не отправляются через 3G (или даже 2G)?
Дополнительная информация:
Я не пытаюсь загрузить файл, а просто отправить JSON на сервер.
после того, сколько времени вы получили данные Bluetooth на своем устройстве? – CodeChanger
@CodeChanger Приложение получает данные от Bluetooth каждые пять минут или меньше. Я уверен, что данные из bluetooth получены, потому что я храню его в локальной базе данных sqlite. – Whirlwind
Хорошо, так как по моим знаниям после 3.0 Min приложение приостановлено, и вам нужно обработать этот режим и вызвать службу с помощью 'bgTask'. – CodeChanger