Search code examples
iosswift2reachability

How to check if application is connected to Internet


I wanted this class to push or show an alertView saying it's not connected to Internet

public class Reachability {

class func isConnectedToNetwork()->Bool{

    var Status:Bool = false
    let url = NSURL(string: "http://google.com/")
    let request = NSMutableURLRequest(URL: url!)
    request.HTTPMethod = "HEAD"
    request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
    request.timeoutInterval = 10.0

    var response: NSURLResponse?


    do{
        var data = try NSURLConnection.sendSynchronousRequest(request, returningResponse: &response)
        print(response)
    } catch {
        //handle error
        print(error)

    }


    if let httpResponse = response as? NSHTTPURLResponse {
        if httpResponse.statusCode == 200 {
            Status = true
        }
    }

    return Status
}
}

Here is my declaration inside the mainViewcontroller(initial)

if Reachability.isConnectedToNetwork() == true {
 }else {
        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            let viewController:UIViewController = (self.storyboard?.instantiateViewControllerWithIdentifier("SignInSignUpVCIdentifier"))!
            self.presentViewController(viewController, animated: true, completion: nil)
        })
    }//end of 

It doesn't push anything. It's showing making attempt 2 sleeping for 4.34324


Solution

  • Try this to check the network connectivity of the device

    import SystemConfiguration
    
    
    
    func isConnectedToNetwork() -> Bool {
    
        var zeroAddress = sockaddr_in()
        zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
        zeroAddress.sin_family = sa_family_t(AF_INET)
        let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
            SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
        }
    
        var flags = SCNetworkReachabilityFlags()
        if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
            return false
        }
    
        let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
        let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
        return (isReachable && !needsConnection)
       }
    

    Add the following code in your function to check the network is reachable or not and get the alert

       if self.isConnectedToNetwork() {
           print(self.isConnectedToNetwork())
           // isConnectedToNetwork == true
           // It comes here when its connected to network
           let alertController = UIAlertController(title: "", message: "Connected to internet", preferredStyle: .Alert)
    
            let OKAction = UIAlertAction(title: "OK", style: .Default) { (action:UIAlertAction!) in
                print("you have pressed OK button");
            }
            alertController.addAction(OKAction)
    
            self.presentViewController(alertController, animated: true, completion:nil)
       }
       else {  
           print(self.isConnectedToNetwork())
           // isConnectedToNetwork == false
           // It comes here when its not connected to network      
         let alertController = UIAlertController(title: "", message: "Not able to connect to internet", preferredStyle: .Alert)
    
            let OKAction = UIAlertAction(title: "OK", style: .Default) { (action:UIAlertAction!) in
                print("you have pressed OK button");
            }
            alertController.addAction(OKAction)
    
            self.presentViewController(alertController, animated: true, completion:nil)
    
       }
    

    Hope this might be helpful