2012-03-07 14 views
6

Tengo un problema. Estoy usando el método reachabilityForInternetConnection de Reachability para detectar la disponibilidad de Internet, pero en lugar de eso obtengo el estado de conexión y no el estado de Internet. Quiero decir que si cambio de mi conexión Wifi, el método me da la indicación correcta de que no tengo conexión, pero si el wifi está encendido y la conexión a Internet no funciona, parece que no funciona. ¿Alguna idea?no se puede detectar la conexión a Internet con accesibilidad alcanzabilidad para la conexión a Internet

Saludos

+0

estoy También estoy experimentando este tipo de problema, me pregunto por qué las personas generalmente no resuelven esto y simplemente usan el alcance. Me refiero a lo que sucede con la aplicación si está conectado a wifi e Internet no funciona. ¿Y cómo manejan este caso? –

Respuesta

3

de accesibilidad sólo se puede utilizar para detectar si el iPhone tiene una conexión con una puerta de acceso a internet. Lo que está detrás de la puerta de entrada, no te dirá. ¿Qué pasa si la LAN es alcanzable pero no tiene salida a Internet? ¿Cómo podría el iPhone adivinar que lo que ve (la LAN) no es Internet entera?

Debe realizar una solicitud real a un sitio real. Si falla, hay algún problema para conectarse a Internet y, con los resultados de Accesibilidad, puede incluso comprender dónde está el problema. La forma más sencilla es realizar una solicitud con NSUrlRequest, por ejemplo, al http://www.google.com. (Si Google muere, es posible que suponga que hay problemas más grandes que hay a continuación, la conectividad de la aplicación :)

+0

¿Qué ocurre si mi aplicación está siendo utilizada por millones de personas en todo el mundo? ¿Debo enviar un gran grupo (si miles de usuarios a la vez usan mi aplicación) de esta solicitud de verificación de estado de red de mi aplicación a Google o Apple? ¿Está bien hacer eso? – Aqueel

+0

Depende de la frecuencia con la que debe comprobar la accesibilidad de su aplicación; intente reducir el número de veces hasta el mínimo posible. De lo contrario, supongo que sí, está bien - http://www.google.com está siendo consultado por billones de personas en cada minuto ... – MrTJ

+0

@Aqueel - ¿Presumiblemente tiene una solicitud real que hacer? Deberías hacerlo. Esa es la única forma de saber si funcionará. ¿De qué sirve saber si Google es accesible si la solicitud real que desea realizar es foobar.org/users?1213321321312&images=med? – hooleyhoop

2

uso este en mi aplicación:

// Check for internet connection 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil]; 

internetReachable = [Reachability reachabilityForInternetConnection]; 
[internetReachable startNotifier]; 

// Check if a pathway to a random host exists 
hostReachable = [Reachability reachabilityWithHostName: @"www.apple.com"]; 
[hostReachable startNotifier]; 

y:

- (void) checkNetworkStatus:(NSNotification *)notice 
{ 
    // Called after network status changes 
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; 
    switch (internetStatus) 
    { 
      // Case: No internet 
     case NotReachable: 
     { 
      internetActive = NO; 

      // Switch to the NoConnection page 
      NoConnectionViewController *notConnected = [[NoConnectionViewController alloc] initWithNibName:@"NoConnectionViewController" bundle:[NSBundle mainBundle]]; 

      notConnected.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
      [self presentModalViewController:notConnected animated:NO]; 

      break; 
     } 
     case ReachableViaWiFi: 
     { 
      internetActive = YES; 
      break; 
     } 
     case ReachableViaWWAN: 
     { 
      internetActive = YES; 
      break; 
     } 
    } 

    // Check if the host site is online 
    NetworkStatus hostStatus = [hostReachable currentReachabilityStatus]; 
    switch (hostStatus) 
    { 
     case NotReachable: 
     { 
      hostActive = NO; 
      break; 
     } 
     case ReachableViaWiFi: 
     { 
      hostActive = YES; 
      break; 
     } 
     case ReachableViaWWAN: 
     { 
      hostActive = YES; 
      break; 
     } 
    } 
} 
+5

¿Qué ocurre si mi aplicación está siendo utilizada por millones de personas en todo el mundo? ¿Debo enviar un gran grupo (si miles de usuarios a la vez usan mi aplicación) de esta solicitud de verificación de estado de red de mi aplicación a Google o Apple? ¿Está bien hacer eso? – Aqueel

Cuestiones relacionadas