Autenticación básica y NSURLConnection sobre 3G

Actualmente estoy trabajando en una aplicación de iOS que requiere authentication HTTP básica para conectarse a web services. Desarrollé la parte de networking utilizando el Simulador de iOS y la networking WiFi de la empresa.

Algunos de mis colegas probaron mi aplicación con sus propios iPads, a través de la networking 3G. Parece que lo que hice para administrar la connection no funciona correctamente … No puedo explicar por qué todo mi trabajo no funciona con una connection 3 / 4G.

Intenté ver qué está sucediendo en el método connectionDidFinishLoading .

  • Con WiFi, la URL que presiono devuelve un file JSON adecuado.
  • Con 3G, tengo un dulce (nulo)

Bien, entonces veamos qué está sucediendo en el método didReceiveResponse

Con Wi-Fi, obtengo eso:

NSHTTPURLResponse: 0x95c7130 { URL: URL_giving_json} { status code: 200, headers { Connection = "Keep-Alive"; "Content-Type" = "application/json"; Date = "Wed, 15 Jan 2014 15:33:05 GMT"; "Keep-Alive" = "timeout=15"; Server = "JAS BHV3"; "Set-Cookie" = "SMSESSION=cookie; Path=/appname/; HttpOnly, ASID=.a1s1; path=/"; "Transfer-Encoding" = Identity; } } 

Con 3G, obtengo eso:

 NSHTTPURLResponse: 0x97d8530 { URL: Connection_URL&TARGET=URL_giving_json} { status code: 200, headers { "Cache-Control" = "no-store"; Connection = "Keep-Alive"; "Content-Encoding" = gzip; "Content-Length" = 3296; "Content-Type" = "text/html; charset=iso-8859-1"; Date = "Wed, 15 Jan 2014 15:28:05 GMT"; "Keep-Alive" = "timeout=15"; Server = Apache; Vary = "Accept-Encoding"; } } 

Esto es lo que probé:

 - (void)hitURLWithURLString:(NSString *)URLToHit { NSURL *url = [NSURL URLWithString:URLToHit]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; [connection start]; } - (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { if ([challenge previousFailureCount] == 0) { // 1 - Received authentication challenge NSURLCnetworkingential *newCnetworkingential = [NSURLCnetworkingential cnetworkingentialWithUser:self.login password:self.password persistence:NSURLCnetworkingentialPersistenceForSession]; // 2 - Cnetworkingential created [[challenge sender] useCnetworkingential:newCnetworkingential forAuthenticationChallenge:challenge]; // 3 - Responded to authentication challenge } else { // 1 - Previous authentication failure [self.delegate authenticationDidFail:self]; } } - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { [self.receivedData setLength:0]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [self.receivedData appendData:data]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { [self.delegate didFinishLoading:self fulldata:self.receivedData]; NSError *error; NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:self.receivedData options:kNilOptions error:&error]; NSLog(@"--->Finished : %@", [dictionary description]); // gives (null) here connection = nil; } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"Connection failed ! Error - %@ %@", [error localizedDescription], [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]); [self.delegate didFailWithError:self error:error]; } 

¿Alguien sabe algo sobre este problema? ¿Por qué no puedo get mi JSON con un dispositivo 3G conectado?

Muchas gracias por tu ayuda.

Y por favor, perdona mi inglés, soy francés … 🙂