Check for an active Internet Connection on iPhone SDK
METHOD 1: Use a simple (ARC and GCD compatible) class to do it
1) Add
2) Add Tony Million's version of
3) Update the interface section
// Checks if we have an internet connection or not
1) Add
2) Add Apple's version of
3) Add
4) Create a couple instances to check in the
7) In the .m file of where you are implementing the check, you can place this in one of the first methods called (
Important Note: The
1) Add
SystemConfiguration
framework to the project but don't worry about including it anywhere2) Add Tony Million's version of
Reachability.h
and Reachability.m
to the project (For Reachability download)3) Update the interface section
#import "Reachability.h"
// Add this to the interface in the .m file of your view controller
@interface MyViewController ()
{
Reachability *internetReachableFoo;
}
@end
4) Then implement this method in the .m file of your view controller which you can call// Checks if we have an internet connection or not
- (void)testInternetConnection
{
internetReachableFoo = [Reachability reachabilityWithHostname:@"www.google.com"];
// Internet is reachable
internetReachableFoo.reachableBlock = ^(Reachability*reach)
{
// Update the UI on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Yayyy, we have the interwebs!");
});
};
// Internet is not reachable
internetReachableFoo.unreachableBlock = ^(Reachability*reach)
{
// Update the UI on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Someone broke the internet :(");
});
};
[internetReachableFoo startNotifier];
}
METHOD 2: Do it yourself the old way using Apple's outdated Reachability class1) Add
SystemConfiguration
framework to the project but don't worry about including it anywhere2) Add Apple's version of
Reachability.h
and Reachability.m
to the project (you can get those here)3) Add
@class Reachability;
to the .h file of where you are implementing the code4) Create a couple instances to check in the
interface
section of the .h file:
Reachability* internetReachable;
Reachability* hostReachable;
5) Add a method in the .h for when the network status updates:
-(void) checkNetworkStatus:(NSNotification *)notice;
6) Add #import "Reachability.h"
to the .m file where you are implementing the check7) In the .m file of where you are implementing the check, you can place this in one of the first methods called (
init
or viewWillAppear
or viewDidLoad
etc):
-(void) viewWillAppear:(BOOL)animated
{
// 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];
// now patiently wait for the notification
}
8) Set up the method for when the notification gets sent and set whatever checks or call whatever methods you may have set up (in my case, I just set a BOOL)
-(void) checkNetworkStatus:(NSNotification *)notice
{
// called after network status changes
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
case NotReachable:
{
NSLog(@"The internet is down.");
self.internetActive = NO;
break;
}
case ReachableViaWiFi:
{
NSLog(@"The internet is working via WIFI.");
self.internetActive = YES;
break;
}
case ReachableViaWWAN:
{
NSLog(@"The internet is working via WWAN.");
self.internetActive = YES;
break;
}
}
NetworkStatus hostStatus = [hostReachable currentReachabilityStatus];
switch (hostStatus)
{
case NotReachable:
{
NSLog(@"A gateway to the host server is down.");
self.hostActive = NO;
break;
}
case ReachableViaWiFi:
{
NSLog(@"A gateway to the host server is working via WIFI.");
self.hostActive = YES;
break;
}
case ReachableViaWWAN:
{
NSLog(@"A gateway to the host server is working via WWAN.");
self.hostActive = YES;
break;
}
}
}
9) In your dealloc
or viewWillDisappear
or similar method, remove yourself as an observer
-(void) viewWillDisappear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
Note: The domain you use doesn't matter. It's just testing for a gateway to any domain.Important Note: The
Reachability
class is one of the most used classes in projects so you might run into naming conflicts with other projects like ShareKit. If this happens, you'll have to rename one of the pairs of Reachability.h
and Reachability.m
files to something else to resolve the issue.
Comments
Post a Comment