Como verificar se há uma conexão ativa com a Internet no iOS ou no MacOS?

Gostaria de verificar se tenho uma conexão com a Internet no iOS usando as bibliotecas Cocoa Touch ou no macOS usando as bibliotecas Cocoa .

Eu NSURL uma maneira de fazer isso usando uma NSURL . A maneira como fiz isso parece um pouco incerta (porque mesmo o Google poderia estar um dia para baixo e depender de uma terceira parte parece ruim), e enquanto eu poderia verificar a resposta de alguns outros sites se o Google não respondesse, parece um desperdício desnecessário e uma sobrecarga na minha aplicação.

 - (BOOL) connectedToInternet { NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]; return ( URLString != NULL ) ? YES : NO; } 

É o que eu fiz de ruim, (para não mencionar stringWithContentsOfURL é obsoleto no iOS 3.0 e macOS 10.4) e em caso afirmativo, qual é a melhor maneira de fazer isso?

Importante : Essa verificação deve ser sempre executada de forma assíncrona. A maioria das respostas abaixo são síncronas, portanto, tenha cuidado, caso contrário, você congelará seu aplicativo.


Rápido

1) Instale via CocoaPods ou Carthage: https://github.com/ashleymills/Reachability.swift

2) Teste de acessibilidade através de fechamentos

 let reachability = Reachability()! reachability.whenReachable = { reachability in if reachability.connection == .wifi { print("Reachable via WiFi") } else { print("Reachable via Cellular") } } reachability.whenUnreachable = { _ in print("Not reachable") } do { try reachability.startNotifier() } catch { print("Unable to start notifier") } 

Objetivo-C

1) Adicione a estrutura SystemConfiguration ao projeto, mas não se preocupe em incluí-la em lugar algum

2) Adicione a versão de Reachability.h e Reachability.m Tony Million ao projeto (encontrada aqui: https://github.com/tonymillion/Reachability )

3) Atualize a seção de interface

 #import "Reachability.h" // Add this to the interface in the .m file of your view controller @interface MyViewController () { Reachability *internetReachableFoo; } @end 

4) Em seguida, implemente este método no arquivo .m do seu controlador de exibição, que você pode chamar

 // 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]; } 

Nota importante: A class Reachability é uma das classs mais usadas em projetos, portanto, você pode encontrar conflitos de nomenclatura com outros projetos. Se isso acontecer, você terá que renomear um dos pares de arquivos Reachability.m e Reachability.m para outra coisa para resolver o problema.

Nota: o domínio que você usa não importa. Está apenas testando um gateway para qualquer domínio.

Eu gosto de manter as coisas simples. A maneira que eu faço isso é:

 //Class.h #import "Reachability.h" #import  - (BOOL)connected; //Class.m - (BOOL)connected { Reachability *reachability = [Reachability reachabilityForInternetConnection]; NetworkStatus networkStatus = [reachability currentReachabilityStatus]; return networkStatus != NotReachable; } 

Então, eu uso isso sempre que quero ver se tenho uma conexão:

 if (![self connected]) { // Not connected } else { // Connected. Do some Internet stuff } 

Este método não espera por status de rede alterados para fazer coisas. Apenas testa o status quando você pede.

Usando o código Reachability da Apple, criei uma function que irá verificar isso corretamente sem que você precise include classs.

Inclua o SystemConfiguration.framework no seu projeto.

Faça algumas importações:

 #import  #import  #import  

Agora é só chamar essa function:

 /* Connectivity testing code pulled from Apple's Reachability Example: https://developer.apple.com/library/content/samplecode/Reachability */ +(BOOL)hasConnectivity { struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)&zeroAddress); if (reachability != NULL) { //NetworkStatus retVal = NotReachable; SCNetworkReachabilityFlags flags; if (SCNetworkReachabilityGetFlags(reachability, &flags)) { if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) { // If target host is not reachable return NO; } if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0) { // If target host is reachable and no connection is required // then we'll assume (for now) that your on Wi-Fi return YES; } if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)) { // ... and the connection is on-demand (or on-traffic) if the // calling application is using the CFSocketStream or higher APIs. if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0) { // ... and no [user] intervention is needed return YES; } } if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) { // ... but WWAN connections are OK if the calling application // is using the CFNetwork (CFSocketStream?) APIs. return YES; } } } return NO; } 

E é o iOS 5 testado para você.

Essa costumava ser a resposta correta, mas agora está desatualizada, já que você deve se inscrever em notifications de acessibilidade. Este método verifica de forma síncrona:


Você pode usar a class de acessibilidade da Apple. Ele também permitirá que você verifique se o Wi-Fi está ativado:

 Reachability* reachability = [Reachability sharedReachability]; [reachability setHostName:@"www.example.com"]; // Set your host name here NetworkStatus remoteHostStatus = [reachability remoteHostStatus]; if (remoteHostStatus == NotReachable) { } else if (remoteHostStatus == ReachableViaWiFiNetwork) { } else if (remoteHostStatus == ReachableViaCarrierDataNetwork) { } 

A class Reachability não é fornecida com o SDK, mas sim uma parte desse aplicativo de amostra da Apple . Basta baixá-lo e copie o arquivo Acessibilidade.h / m para o seu projeto. Além disso, você precisa adicionar a estrutura SystemConfiguration ao seu projeto.

Aqui está uma resposta muito simples:

 NSURL *scriptUrl = [NSURL URLWithString:@"http://www.google.com/m"]; NSData *data = [NSData dataWithContentsOfURL:scriptUrl]; if (data) NSLog(@"Device is connected to the Internet"); else NSLog(@"Device is not connected to the Internet"); 

O URL deve apontar para um site extremamente pequeno. Eu uso o site para celular do Google aqui, mas se eu tivesse um servidor da Web confiável, faria upload de um arquivo pequeno com apenas um caractere para a velocidade máxima.

Se verificar se o dispositivo está de alguma forma ligado à Internet é tudo o que você quer fazer, eu definitivamente recomendo usar esta solução simples. Se você precisa saber como o usuário está conectado, usar Acessibilidade é o caminho a percorrer.

Cuidado: isso bloqueará brevemente o seu tópico enquanto ele carrega o site. No meu caso, isso não foi um problema, mas você deve considerar isso (créditos para Brad por apontar isso).

Aqui está como faço isso em meus aplicativos: Embora um código de resposta com 200 status não garanta nada, ele é estável o suficiente para mim. Isso não requer tanto carregamento quanto as respostas NSData postadas aqui, já que o meu apenas verifica a resposta HEAD.

Código Swift

 func checkInternet(flag:Bool, completionHandler:(internet:Bool) -> Void) { UIApplication.sharedApplication().networkActivityIndicatorVisible = true let url = NSURL(string: "http://www.appleiphonecell.com/") let request = NSMutableURLRequest(URL: url!) request.HTTPMethod = "HEAD" request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData request.timeoutInterval = 10.0 NSURLConnection.sendAsynchronousRequest(request, queue:NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in UIApplication.sharedApplication().networkActivityIndicatorVisible = false let rsp = response as! NSHTTPURLResponse? completionHandler(internet:rsp?.statusCode == 200) }) } func yourMethod() { self.checkInternet(false, completionHandler: {(internet:Bool) -> Void in if (internet) { // "Internet" aka Apple's region universal URL reachable } else { // No "Internet" aka Apple's region universal URL un-reachable } }) } 

Código Objetivo-C

 typedef void(^connection)(BOOL); - (void)checkInternet:(connection)block { NSURL *url = [NSURL URLWithString:@"http://www.appleiphonecell.com/"]; NSMutableURLRequest *headRequest = [NSMutableURLRequest requestWithURL:url]; headRequest.HTTPMethod = @"HEAD"; NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration ephemeralSessionConfiguration]; defaultConfigObject.timeoutIntervalForResource = 10.0; defaultConfigObject.requestCachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData; NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration:defaultConfigObject delegate:self delegateQueue: [NSOperationQueue mainQueue]]; NSURLSessionDataTask *dataTask = [defaultSession dataTaskWithRequest:headRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (!error && response) { block([(NSHTTPURLResponse *)response statusCode] == 200); } }]; [dataTask resume]; } - (void)yourMethod { [self checkInternet:^(BOOL internet) { if (internet) { // "Internet" aka Apple's region universal URL reachable } else { // No "Internet" aka Apple's region universal URL un-reachable } }]; } 

A Apple fornece código de amostra para verificar os diferentes tipos de disponibilidade da rede. Como alternativa, há um exemplo no livro de receitas dos desenvolvedores do iPhone.

Nota: Por favor, veja o comentário da @KHG sobre esta resposta em relação ao uso do código de acessibilidade da Apple.

Você poderia usar Reachability por  ( disponível aqui ).

 #import "Reachability.h" - (BOOL)networkConnection { return [[Reachability reachabilityWithHostName:@"www.google.com"] currentReachabilityStatus]; } if ([self networkConnection] == NotReachable) { /* No Network */ } else { /* Network */ } //Use ReachableViaWiFi / ReachableViaWWAN to get the type of connection. 

A Apple fornece um aplicativo de exemplo que faz exatamente isso:

Acessibilidade

Apenas a class Reachability foi atualizada. Agora você pode usar:

 Reachability* reachability = [Reachability reachabilityWithHostName:@"www.apple.com"]; NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; if (remoteHostStatus == NotReachable) { NSLog(@"not reachable");} else if (remoteHostStatus == ReachableViaWWAN) { NSLog(@"reachable via wwan");} else if (remoteHostStatus == ReachableViaWiFi) { NSLog(@"reachable via wifi");} 

Uma versão no Reachability para iOS 5 é darkseed / Reachability.h . Não é meu! =)

Há uma modernização agradável de ARCs e GCDs de Acessibilidade aqui:

Acessibilidade

Se você estiver usando o AFNetworking poderá usar sua própria implementação para o status de acessibilidade da Internet.

A melhor maneira de usar o AFNetworking é subclassificar a class AFHTTPClient e usar essa class para fazer suas conexões de rede.

Uma das vantagens de usar essa abordagem é que você pode usar blocks para definir o comportamento desejado quando o status de acessibilidade mudar. Supondo que eu criei uma subclass singleton de AFHTTPClient (como dito no “Subclassing notes” em AFNetworking docs ) chamado BKHTTPClient , eu faria algo como:

 BKHTTPClient *httpClient = [BKHTTPClient sharedClient]; [httpClient setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { if (status == AFNetworkReachabilityStatusNotReachable) { // Not reachable } else { // Reachable } }]; 

Você também pode verificar se há conexões Wi-Fi ou WLAN especificamente usando os enums AFNetworkReachabilityStatusReachableViaWiFi e AFNetworkReachabilityStatusReachableViaWiFi ( mais aqui ).

Eu usei o código nesta discussão e parece funcionar bem (leia o tópico inteiro !).

Eu não testei exaustivamente com todos os tipos imagináveis ​​de conexão (como ad hoc Wi-Fi).

Muito simples …. Tente estes passos:

Etapa 1: adicione a estrutura SystemConfiguration ao seu projeto.


Etapa 2: importe o seguinte código para o seu arquivo de header .

 #import  

Etapa 3: use o seguinte método

  • Tipo 1:

     - (BOOL) currentNetworkStatus { [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; BOOL connected; BOOL isConnected; const char *host = "www.apple.com"; SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host); SCNetworkReachabilityFlags flags; connected = SCNetworkReachabilityGetFlags(reachability, &flags); isConnected = NO; isConnected = connected && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired); CFRelease(reachability); return isConnected; } 

  • Tipo 2:

    Cabeçalho de importação : #import "Reachability.h"

     - (BOOL)currentNetworkStatus { Reachability *reachability = [Reachability reachabilityForInternetConnection]; NetworkStatus networkStatus = [reachability currentReachabilityStatus]; return networkStatus != NotReachable; } 

Passo 4: como usar:

 - (void)CheckInternet { BOOL network = [self currentNetworkStatus]; if (network) { NSLog(@"Network Available"); } else { NSLog(@"No Network Available"); } } 
 -(void)newtworkType { NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"] valueForKey:@"foregroundView"]subviews]; NSNumber *dataNetworkItemView = nil; for (id subview in subviews) { if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) { dataNetworkItemView = subview; break; } } switch ([[dataNetworkItemView valueForKey:@"dataNetworkType"]integerValue]) { case 0: NSLog(@"No wifi or cellular"); break; case 1: NSLog(@"2G"); break; case 2: NSLog(@"3G"); break; case 3: NSLog(@"4G"); break; case 4: NSLog(@"LTE"); break; case 5: NSLog(@"Wifi"); break; default: break; } } 
 - (void)viewWillAppear:(BOOL)animated { NSString *URL = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]; return (URL != NULL ) ? YES : NO; } 

Ou use a class Reachability .

Existem duas maneiras de verificar a disponibilidade da Internet usando o iPhone SDK:

1. Verifique se a página do Google está aberta ou não.

2. Classe de Acessibilidade

Para mais informações, consulte Acessibilidade (Apple Developer).

Use http://huytd.github.io/datatify/ . É mais fácil do que adicionar bibliotecas e escrever código sozinho.

Primeiro : adicione CFNetwork.framework na estrutura

Código : ViewController.m

 #import "Reachability.h" - (void)viewWillAppear:(BOOL)animated { Reachability *r = [Reachability reachabilityWithHostName:@"www.google.com"]; NetworkStatus internetStatus = [r currentReachabilityStatus]; if ((internetStatus != ReachableViaWiFi) && (internetStatus != ReachableViaWWAN)) { /// Create an alert if connection doesn't work UIAlertView *myAlert = [[UIAlertView alloc]initWithTitle:@"No Internet Connection" message:NSLocalizedString(@"InternetMessage", nil)delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [myAlert show]; [myAlert release]; } else { NSLog(@"INTERNET IS CONNECT"); } } 

Primeiro baixe a class de acessibilidade e coloque o arquivo reachability.he reachabilty.m no seu Xcode .

A melhor maneira é criar uma class Functions comum (NSObject) para que você possa usá-la em qualquer class. Estes são dois methods para uma verificação de acessibilidade da conexão de rede:

 +(BOOL) reachabiltyCheck { NSLog(@"reachabiltyCheck"); BOOL status =YES; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; Reachability * reach = [Reachability reachabilityForInternetConnection]; NSLog(@"status : %d",[reach currentReachabilityStatus]); if([reach currentReachabilityStatus]==0) { status = NO; NSLog(@"network not connected"); } reach.reachableBlock = ^(Reachability * reachability) { dispatch_async(dispatch_get_main_queue(), ^{ }); }; reach.unreachableBlock = ^(Reachability * reachability) { dispatch_async(dispatch_get_main_queue(), ^{ }); }; [reach startNotifier]; return status; } +(BOOL)reachabilityChanged:(NSNotification*)note { BOOL status =YES; NSLog(@"reachabilityChanged"); Reachability * reach = [note object]; NetworkStatus netStatus = [reach currentReachabilityStatus]; switch (netStatus) { case NotReachable: { status = NO; NSLog(@"Not Reachable"); } break; default: { if (!isSyncingReportPulseFlag) { status = YES; isSyncingReportPulseFlag = TRUE; [DatabaseHandler checkForFailedReportStatusAndReSync]; } } break; } return status; } + (BOOL) connectedToNetwork { // Create zero addy struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; // Recover reachability flags SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); SCNetworkReachabilityFlags flags; BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); CFRelease(defaultRouteReachability); if (!didRetrieveFlags) { NSLog(@"Error. Could not recover network reachability flags"); return NO; } BOOL isReachable = flags & kSCNetworkFlagsReachable; BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired; BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection; NSURL *testURL = [NSURL URLWithString:@"http://www.apple.com/"]; NSURLRequest *testRequest = [NSURLRequest requestWithURL:testURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20.0]; NSURLConnection *testConnection = [[NSURLConnection alloc] initWithRequest:testRequest delegate:self]; return ((isReachable && !needsConnection) || nonWiFi) ? (testConnection ? YES : NO) : NO; } 

Agora você pode verificar a conexão de rede em qualquer class chamando este método de class.

Há também outro método para verificar a conexão à Internet usando o iPhone SDK.

Tente implementar o código a seguir para a conexão de rede.

 #import  #include  /** Checking for network availability. It returns YES if the network is available. */ + (BOOL) connectedToNetwork { // Create zero addy struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; // Recover reachability flags SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); SCNetworkReachabilityFlags flags; BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); CFRelease(defaultRouteReachability); if (!didRetrieveFlags) { printf("Error. Could not recover network reachability flags\n"); return NO; } BOOL isReachable = ((flags & kSCNetworkFlagsReachable) != 0); BOOL needsConnection = ((flags & kSCNetworkFlagsConnectionRequired) != 0); return (isReachable && !needsConnection) ? YES : NO; } 

Fazer isso sozinho é extremamente simples. O método a seguir funcionará. Apenas certifique-se de não permitir que um protocolo de nome de host, como HTTP, HTTPS, etc., seja transmitido com o nome.

 -(BOOL)hasInternetConnection:(NSString*)urlAddress { SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [urlAddress UTF8String]); SCNetworkReachabilityFlags flags; if (!SCNetworkReachabilityGetFlags(ref, &flags)) { return NO; } return flags & kSCNetworkReachabilityFlagsReachable; } 

É rápido, simples e indolor.

Eu achei simples e fácil de usar biblioteca SimplePingHelper .

Exemplo de código: chrishulbert / SimplePingHelper ( GitHub )

A class Reachability é OK para descobrir se a conexão com a Internet está disponível para um dispositivo ou não …

Mas no caso de acessar um recurso de intranet :

O ping do servidor de intranet com a class de acessibilidade sempre retorna true.

Portanto, uma solução rápida nesse cenário seria criar um método da Web chamado pingme junto com outros methods da web no serviço. O pingme deve retornar alguma coisa.

Então eu escrevi o seguinte método em funções comuns

 -(BOOL)PingServiceServer { NSURL *url=[NSURL URLWithString:@"http://www.serveraddress/service.asmx/Ping"]; NSMutableURLRequest *urlReq=[NSMutableURLRequest requestWithURL:url]; [urlReq setTimeoutInterval:10]; NSURLResponse *response; NSError *error = nil; NSData *receivedData = [NSURLConnection sendSynchronousRequest:urlReq returningResponse:&response error:&error]; NSLog(@"receivedData:%@",receivedData); if (receivedData !=nil) { return YES; } else { NSLog(@"Data is null"); return NO; } } 

O método acima foi muito útil para mim, então, sempre que tento enviar alguns dados para o servidor, sempre verifico a acessibilidade do meu recurso de intranet usando esse URLRequest de tempo limite baixo.

Eu acho que essa é a melhor resposta.

“Sim” significa conectado. “Não” significa desconectado.

 #import "Reachability.h" - (BOOL)canAccessInternet { Reachability *IsReachable = [Reachability reachabilityForInternetConnection]; NetworkStatus internetStats = [IsReachable currentReachabilityStatus]; if (internetStats == NotReachable) { return NO; } else { return YES; } } 
  1. Download the Reachability file, https://gist.github.com/darkseed/1182373

  2. And add CFNetwork.framework and ‘SystemConfiguration.framework’ in framework

  3. Do #import “Reachability.h”

First : Add CFNetwork.framework in framework

Code : ViewController.m

 - (void)viewWillAppear:(BOOL)animated { Reachability *r = [Reachability reachabilityWithHostName:@"www.google.com"]; NetworkStatus internetStatus = [r currentReachabilityStatus]; if ((internetStatus != ReachableViaWiFi) && (internetStatus != ReachableViaWWAN)) { /// Create an alert if connection doesn't work UIAlertView *myAlert = [[UIAlertView alloc]initWithTitle:@"No Internet Connection" message:NSLocalizedString(@"InternetMessage", nil)delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [myAlert show]; [myAlert release]; } else { NSLog(@"INTERNET IS CONNECT"); } } 

Import Reachable.h class in your ViewController , and use the following code to check connectivity :

  #define hasInternetConnection [[Reachability reachabilityForInternetConnection] isReachable] if (hasInternetConnection){ // To-do block } 

Apart from reachability you may also use the Simple Ping helper library . It works really nice and is simple to integrate.

  • Step 1: Add the Reachability class in your Project.
  • Step 2: Import the Reachability class
  • Step 3: Create the below function

     - (BOOL)checkNetConnection { self.internetReachability = [Reachability reachabilityForInternetConnection]; [self.internetReachability startNotifier]; NetworkStatus netStatus = [self.internetReachability currentReachabilityStatus]; switch (netStatus) { case NotReachable: { return NO; } case ReachableViaWWAN: { return YES; } case ReachableViaWiFi: { return YES; } } } 
  • Step 4: Call the function as below:

     if (![self checkNetConnection]) { [GlobalFunctions showAlert:@"" message:@"Please connect to the Internet!" canBtntitle:nil otherBtnTitle:@"Ok"]; return; } else { Log.v("internet is connected","ok"); } 

Checking the Internet connection availability in (iOS) Xcode 8 , Swift 3.0

This is simple method for checking the network availability like our device is connected to any network or not. I have managed to translate it to Swift 3.0 and here the final code. The existing Apple Reachability class and other third party libraries seemed to be too complicated to translate to Swift.

This works for both 3G,4G and WiFi connections.

Don’t forget to add “SystemConfiguration.framework” to your project builder.

 //Create new swift class file Reachability in your project. import SystemConfiguration public class InternetReachability { class func isConnectedToNetwork() -> Bool { var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)) zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) zeroAddress.sin_family = sa_family_t(AF_INET) let defaultRouteReachability = withUnsafePointer(&zeroAddress) { SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue() } var flags: SCNetworkReachabilityFlags = 0 if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0 { return false } let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0 let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0 return isReachable && !needsConnection } } // Check network connectivity from anywhere in project by using this code. if InternetReachability.isConnectedToNetwork() == true { print("Internet connection OK") } else { print("Internet connection FAILED") } 
Intereting Posts