Mam aplikację, która wysyła dane do serwera, gdy aplikacja jest w tle. Oto kod odpowiedzialny za wysyłanie danych:Dane nie wysłane z tła za pośrednictwem 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;
}
Więc inputData
jest prosty słownik z łańcuchów.
Sposób doRequest
opiera się na NSURLSession i zasadniczo wygląda następująco:
-(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];
}
Jak powiedziałem, wszystko działa za pośrednictwem Wi-Fi, aplikacja przechodzi w tle, a po kilku minutach niestandardowe urządzenie Bluetooth wysyła pewne dane i uruchamia aplikację z trybu zawieszonego. Po otrzymaniu danych przez aplikację iOS, nie uda się wysłać jej do serwera, jeśli urządzenie jest połączone przez 3G. Jestem przekonany, że dane wysyłane przez bluetooth są odbierane, ponieważ są przechowywane w lokalnej bazie danych.
Jest jeszcze jeden ważny fakt. Jeśli aplikacja jest uruchamiana przez Xcode, nawet jeśli urządzenie jest połączone przez 3G, aplikacja wyśle dane z tła. Aby to zrobić, uruchamiam aplikację, a następnie stukam przycisk strony głównej, aby umieścić ją w tle.
Nie wiem, jaka jest różnica i dlaczego aplikacja działa inaczej, gdy jest podłączona za pomocą kabla do komputera Mac i dlaczego dane nie są przesyłane przez sieć 3G (lub nawet 2G)?
Dodatkowe informacje:
Nie próbuję załadować plik, ale raczej po prostu wysłać JSON do serwera.
po tym, ile czasu masz danych bluetooth w urządzeniu? – CodeChanger
@CodeChanger Aplikacja pobiera dane z bluetooth co pięć minut lub mniej. Jestem pewien, że dane z bluetooth są odbierane, ponieważ przechowuję je w lokalnej bazie danych SQLite. – Whirlwind
OK, zgodnie z moją wiedzą po zawieszeniu aplikacji 3.0 Min i musisz obsłużyć ten tryb i zadzwonić do swojej usługi za pomocą 'bgTask'. – CodeChanger