Ricerca…


Osservazioni

Il codice sorgente di Reachability.h e Reachability.m sono disponibili sul sito di documentazione per sviluppatori Apple.

Avvertenze

A differenza di altre piattaforme, Apple deve ancora fornire un set standard di API per determinare lo stato della rete di un dispositivo iOS e offrire solo questi esempi di codice collegati sopra. Il file di origine cambia nel tempo, ma una volta importati in un progetto di app, vengono raramente aggiornati dagli sviluppatori.

Per questo motivo, la maggior parte degli sviluppatori di app tende a utilizzare una delle tante librerie gestite da Github / Cocoapod per raggiungibilità.

Apple consiglia inoltre, per le richieste fatte su richiesta dell'utente, di tentare sempre prima una connessione, prima di utilizzare Reachability / SCNetworkReachability per diagnosticare l'errore o attendere il ritorno della connessione .

Creazione di un listener Reachability

La classe Reachability di Apple controlla periodicamente lo stato della rete e avvisa gli osservatori delle modifiche.

Reachability *internetReachability = [Reachability reachabilityForInternetConnection];
[internetReachability startNotifier];

Aggiungi osservatore alle modifiche di rete

Reachability utilizza i messaggi NSNotification per avvisare gli osservatori quando lo stato della rete è cambiato. La tua classe dovrà diventare un osservatore.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];

Altrove nella tua classe, implementa la firma del metodo

- (void) reachabilityChanged:(NSNotification *)note {
    //code which reacts to network changes
}

Avvisa quando la rete non è più disponibile

- (void)reachabilityChanged:(NSNotification *)note {
    Reachability* reachability = [note object];
    NetworkStatus netStatus = [reachability currentReachabilityStatus];

    if (netStatus == NotReachable) {
        NSLog(@"Network unavailable");
    }
}

Avvisa quando la connessione diventa WIFI o rete cellulare

- (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;
    }
}

Verifica se è connesso alla rete

veloce

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
}

Objective-C:

possiamo controllare la connettività di rete entro poche righe di codice come:

-(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;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow