iOS
Comprobando la conectividad de la red
Buscar..
Observaciones
El código fuente de Reachability.h
Reachability.m
se puede encontrar en el sitio de documentación para desarrolladores de Apple.
Advertencias
A diferencia de otras plataformas, Apple aún debe proporcionar un conjunto estándar de API para determinar el estado de la red de un dispositivo iOS y ofrecer solo estos ejemplos de código vinculados anteriormente. El archivo de origen cambia con el tiempo, pero una vez importados en un proyecto de aplicación, los desarrolladores rara vez los actualizan.
Por esta razón, la mayoría de los desarrolladores de aplicaciones tienden a usar una de las muchas bibliotecas mantenidas por Github / Cocoapod para lograr accesibilidad.
Apple también recomienda, para las solicitudes realizadas a instancias del usuario, que siempre intente una conexión primero , antes de usar Reachability / SCNetworkReachability para diagnosticar la falla o esperar a que la conexión regrese .
Creando un oyente de Alcance
La clase de Alcance de Apple verifica periódicamente el estado de la red y alerta a los observadores sobre los cambios.
Reachability *internetReachability = [Reachability reachabilityForInternetConnection];
[internetReachability startNotifier];
Agregar observador a los cambios de red
Reachability
utiliza los mensajes de NSNotification
para alertar a los observadores cuando el estado de la red ha cambiado. Tu clase tendrá que convertirse en un observador.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
En otro lugar de tu clase, implementa la firma del método
- (void) reachabilityChanged:(NSNotification *)note {
//code which reacts to network changes
}
Alerta cuando la red deja de estar disponible
- (void)reachabilityChanged:(NSNotification *)note {
Reachability* reachability = [note object];
NetworkStatus netStatus = [reachability currentReachabilityStatus];
if (netStatus == NotReachable) {
NSLog(@"Network unavailable");
}
}
Alerta cuando la conexión se convierte en una red WIFI o celular.
- (void)reachabilityChanged:(NSNotification *)note {
Reachability* reachability = [note object];
NetworkStatus netStatus = [reachability currentReachabilityStatus];
switch (netStatus) {
case NotReachable:
NSLog(@"Network unavailable");
break;
case ReachableViaWWAN:
NSLog(@"Network is cellular");
break;
case ReachableViaWiFi:
NSLog(@"Network is WIFI");
break;
}
}
Verificar si está conectado a la red.
Rápido
import SystemConfiguration
/// Class helps to code reuse in handling internet network connections.
class NetworkHelper {
/**
Verify if the device is connected to internet network.
- returns: true if is connected to any internet network, false if is not
connected to any internet network.
*/
class 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)
}
}
if NetworkHelper.isConnectedToNetwork() {
// Is connected to network
}
C objetivo:
Podemos verificar la conectividad de la red dentro de algunas líneas de código como:
-(BOOL)isConntectedToNetwork
{
Reachability *networkReachability = [Reachability reachabilityForInternetConnection];
NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];
if (networkStatus == NotReachable)
{
NSLog(@"There IS NO internet connection");
return false;
} else
{
NSLog(@"There IS internet connection");
return true;
}
}