#15 Sprawdzenie czy jest dostępne połączenie Internetowe w SWIFT 3

W tym wpisie zajmiemy się sprawdzaniem czy telefon posiada aktywne połączenie z Internetem. W przypadku naszej aplikacji jest to bardzo istotna funkcja, ponieważ aplikacja musi pobierać dane na żywo z Internetu. Ma to oczywiście swoje wady i zalety ponieważ raz napisana aplikacja jest w późniejszym czasie aktualizowana tylko przez nowe dane pobierane w JSON’ie co jest bardzo wygodne niż każdorazowe wrzucanie aktualizacji aplikacji do sklepu i czekanie na zatwierdzenie zmian.

Aby sprawdzić aktywne połączenie internetowe wykorzystamy poniższy kod, a najważniejszym jego elementem jest SCNetworkReachability, który w przypadku braku połączenia zwróci false i na tej podstawie można wyświetlić komunikat z odpowiednią informacją.

Na samym początku bardzo ważne aby zaimportować bibliotekę, bez której kod zacznie sypać błędami.

import SystemConfiguration

Następnie dodajemy całą gotową funkcję, którą możemy umieścić w pierwszym widoku naszej aplikacji, lub zrobić specjalny plik np. Utils.swift w którym będziemy trzymać takie globalne funkcje i wykorzystywać je w różnych controlerach.

func isInternetAvailable() -> Bool
    {
        var zeroAddress = sockaddr_in()
        zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
        zeroAddress.sin_family = sa_family_t(AF_INET)
        
        let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
            $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
                SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
            }
        }
        
        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)
    }

Jak widać całoś została spakowana do jednej funkcji, aby sprawdzić działanie wystarczy w metodzie viewDidLoad(), na samej górze przed pobieraniem danych z Internetu wywołać poniższy kod:

if(!isInternetAvailable()) {
            print("brak dostępu do Internetu")
            // dalsze instrukcje
}

Teraz nasza aplikacja jest juz zabezpieczona przez pojawianiem się błędów spowodowanych brakiem dostępu do sieci. W przypadku braku Internetu możemy wyświetlić komunikat alert view, jak jak w poprzednim wpisie, lub wymusić wyłączenie aplikacji.

Dodaj komentarz