I'm currently checking network connection on viewDidLoad
using this:
-(BOOL)reachable {
ReachabilityDRC *r = [ReachabilityDRC reachabilityWithHostName:@"google.com"];
NetworkStatus internetStatus = [r currentReachabilityStatus];
if(internetStatus == NotReachable) {
return NO;
}
return YES;
}
But I also want to be notified if there is a change of network, such as wifi dropped, or wifi is back, so I can make changes accordingly.
How can I adjust my method to do something like that?
Reachability means the Service Engine has access to the networks required per the configuration of the virtual service and its pool members. In the example above, a Service Engine is required to have access to the following networks: 20.1.
You can use the function usesInterfaceType(_:) to check which interface type this network path uses. This is the most effective way to figure out if your app is connected over WiFi, cellular or ethernet. print(“It's WiFi!”)
Network Reachability is the network state of the user's device. We can use it to understand if the device is offline or online using either wifi or mobile data.
1- add SystemConfiguration.framework
to your project.
2- Download following files from GitHub
Reachability.h
Reachability.m
3- Add these files in your projects
4- add @class Reachability;
in YourViewController.h
#import <UIKit/UIKit.h>
@class Reachability;
5- add variable Reachability* internetReachable;
in YourViewController.h
#import <UIKit/UIKit.h>
@class Reachability;
@interface YourViewController : UIViewController {
Reachability* internetReachable;
}
6- add Reachability.h
in YourViewController.m
#import "YourViewController.h"
#import "Reachability.h"
7- add following lines in -(void)ViewDidLoad
in YourViewController.m
-(void)ViewDidLoad {
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(checkNetworkStatus:)
name:kReachabilityChangedNotification
object:nil];
internetReachable = [Reachability reachabilityForInternetConnection];
[internetReachable startNotifier];
}
8- add following function after -(void)viewDidLoad
-(void) checkNetworkStatus:(NSNotification *)notice
{
// called after network status changes
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;
}
}
}
Now every change of internet connection you will see log in console.
Another possible solution is to add a NS Notification in "application didfinishlaunching":
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkForReachability) name:kReachabilityChangedNotification object:nil];
and in checkForReachability method do this:
Reachability *reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if(remoteHostStatus == NotReachable) {
//Do something
}
else if (remoteHostStatus == ReachableViaWiFi) {
// Do something
}
else{
// Else do something else
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With