2014-05-13 9 views
5

Ich bin mit AFNetworking und fragte mich, wie ein Szenario zu erkennen, wenn Benutzer mit einem WLAN-Netzwerk ohne aktive Internetverbindung verbunden ist.AFNetworking erkennt, wenn WiFi-Verbindung ohne aktive Internetverbindung

Ich reproduzieren dieses Szenario kaufen powering einen Router ohne Verbindung der DSL-Linie.

AFNetworking return AFNetworkReachabilityStatusReachableViaWiFi = 2 

mein Code:

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

dank

refacotred ich den Code wie

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

nun der Block nie aufgerufen werden!

+0

hat die akzeptierte Antwort für Sie gearbeitet ?? – SandeepAggarwal

Antwort

2

Anstatt [AFNetworkReachabilityManager sharedManager] verwendet, die nur eine Netzwerkverbindung überwacht, können Sie [AFNetworkReachabilityManager managerForDomain:(NSString *)domain] und übergeben Sie einen geeigneten Hostnamen - wie "www.google.com" - auf diese Weise können Sie testen, ob die n Das Netzwerk, mit dem Sie verbunden sind, hat Internetzugang - es kann immer noch durch lokale DNS und einen Webserver getäuscht werden, aber ich würde denken, dass es unwahrscheinlich ist, dass jemand das tun würde.

Sobald Sie Ihre AFNetworkReachabilityManager Sie den Änderungsblock einstellen können, wie Sie für den freigegebenen Manager tun

+0

Hey, bitte überprüfen Sie meine ursprüngliche Post bearbeiten – ibm123

+0

Wie lange haben Sie gewartet? Es kann einige Zeit dauern, bis das DNS-Timeout fehlschlägt. Sie können auch einen bekannten Host wie 8.8.8.8 versuchen, um eine DNS-Suche zu vermeiden – Paulw11

1

Verwenden Sie Reachability Klasse und ihre reachabilityForInternetConnection Methode.

Reachability *networkReachability = [Reachability reachabilityForInternetConnection]; 
NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];  

if (networkStatus == NotReachable) 
{   
    NSLog(@"There is NO Internet connection");   
} 
else 
{   
    NSLog(@"There is Internet connection");   
} 
0

Gehen Sie durch Reachability Klasse von Apple. Es hat alle Funktionen, die Sie benötigen. Am besten verwenden Sie eine Domain (wie Google), um nach einer tatsächlichen Internetverbindung zu suchen.

Zusammengefasst Beispielcode:

Add Beobachter in 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]; 

in der Zielmethode Dann:

- (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; 
    } 
} 
} 
+0

Unglücklicherweise sagt Apples Erreichbarkeit Ihnen nicht, ob es sich mit einem Host verbinden kann, nur wenn es sich mit einem verbinden kann. Laut ihrem Hinweis: 'Hinweis: Erreichbarkeit kann Ihre Anwendung nicht sagen, wenn Sie eine Verbindung zu einem bestimmten Host herstellen können, nur dass eine Schnittstelle verfügbar ist, die eine Verbindung zulassen könnte, und ob diese Schnittstelle der WWAN ist. Sie können dies testen, indem Sie die Verbindung trennen Internet von Ihrem WLAN-Router. Die Erreichbarkeit sagt weiterhin, dass Google erreichbar ist, solange das Gerät mit WiFi verbunden ist. – jeffjv

Verwandte Themen