AFNetworking detecta cuando hay connection wifi sin connection a internet activa

Estoy usando AFNetworking y me preguntaba cómo detectar un escenario cuando el usuario está conectado a una networking wifi sin connection a Internet activa.

Reproduzco este escenario para comprar un enrutador sin conectar la línea DSL.

 AFNetworking return AFNetworkReachabilityStatusReachableViaWiFi = 2 

mi código:

  [[AFNetworkReachabilityManager shanetworkingManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); self.isInternetAvialable = status > 0; }]; 

Gracias

Reordiné el código para ser como

  AFNetworkReachabilityManager* manager = [AFNetworkReachabilityManager managerForDomain:@"http://www.google.com"]; [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); self.isInternetAvialable = status > 0; }]; [manager startMonitoring]; 

ahora el bloque nunca se llama!

En lugar de utilizar [AFNetworkReachabilityManager shanetworkingManager] que solo monitorea la conectividad de la networking, puede usar [AFNetworkReachabilityManager managerForDomain:(NSString *)domain] y pasar un nombre de host apropiado, como "www.google.com", de esta manera puede comprobar si la networking está conectado tiene acceso a Internet, todavía puede ser engañado por el DNS local y un server web, pero creo que es poco probable que alguien lo haga.

Una vez que tenga su AFNetworkReachabilityManager , puede configurar el bloque de cambio como lo hace para el administrador compartido

Utilice la class Alcanzabilidad y su método reachabilityForInternetConnection .

 Reachability *networkReachability = [Reachability reachabilityForInternetConnection]; NetworkStatus networkStatus = [networkReachability currentReachabilityStatus]; if (networkStatus == NotReachable) { NSLog(@"There is NO Internet connection"); } else { NSLog(@"There is Internet connection"); } 

Pase por la class de scope de Apple. Tiene todas las funciones que necesita. Su mejor apuesta aquí es utilizar un dominio (como Google) para verificar la conectividad real a Internet.

Código de muestra resumido:

Agregue el observador en didFinishLaunchingWithOptions:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil]; internetReachable = [[Reachability reachabilityForInternetConnection] retain]; [internetReachable startNotifier]; // check if a pathway to a random host exists hostReachable = [Reachability reachabilityWithHostname:@"SOME_HOST"]; [hostReachable startNotifier]; 

Entonces, en el método objective:

 - (void) checkNetworkStatus:(NSNotification *)notice { NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; switch (internetStatus) { case NotReachable: { NSLog(@"The internet is down."); break; } case ReachableViaWiFi: { NSLog(@"The internet is working via WIFI."); break; } case ReachableViaWWAN: { NSLog(@"The internet is working via WWAN."); break; } } NetworkStatus hostStatus = [hostReachable currentReachabilityStatus]; switch (hostStatus) { case NotReachable: { NSLog(@"A gateway to the host server is down."); break; } case ReachableViaWiFi: { NSLog(@"A gateway to the host server is working via WIFI."); break; } case ReachableViaWWAN: { NSLog(@"A gateway to the host server is working via WWAN."); break; } } }