Reputation: 1246
I have a problem. I am using reachabilityForInternetConnection method of Reachability for detecting internet availability but instead of that I am getting status of connection and not status of internet. I mean if I turn of my Wifi connection, the method gives me correct indication that I dont have connection but if wifi is on and internet connection is not working, it does not seem to work. Any idea?
Best Regards
Upvotes: 7
Views: 5526
Reputation: 766
I use this in my app:
// 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];
and:
- (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;
}
}
}
Upvotes: 2
Reputation: 13182
Reachability can be used only to detect whether the iPhone has a connection to a gateway to the internet. What is behind the gateway, it will not tell you. What if the LAN is reachable but you have no exit to the Internet? How could iPhone guess that what it sees (the LAN) is not the whole Internet?
You should make some real request to a real site. If it fails, there are some problem connecting to the Internet, and with the results of Reachability you can even understand where is the problem. The simplest way is to make a request with NSUrlRequest for example to http://www.google.com. (If google dies, you may suppose that there are bigger problems out there then your app's connectivity :)
Upvotes: 3