2017-08-30 6 views
0

Dies ist meine Klasse für die Überprüfung der Verbindung meiner App, da es die Verwendung von Internet/Handy-Verbindung erfordert, aber meine App funktioniert nicht, wenn es über Mobilfunkverbindung (3G verbunden ist/4G/LTE). Jeder könnte mir eine Hand geben? DANKErreichbarkeit kann nicht über Mobilfunkverbindung in Swift 3

public class Reachability { 

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(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 = SCNetworkReachabilityFlags(rawValue: 0) 
    if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false { 
     return false 
    } 

    let isReachable = flags == .reachable 
    let needsConnection = flags == .connectionRequired 
    let wWAN = flags == .isWWAN 

    return isReachable || wWAN && !needsConnection 

} 
} 

Antwort

1

Ich habe diese Methode in meinem Code verwendet, um herauszufinden, ob das Gerät mit dem Internet verbunden ist oder nicht! Ich habe den Code auf StackOverFlow gefunden, kann mich aber nicht an den Link erinnern. Wenn jemand den Link kennt, bitte Kommentar, damit ich den Beitrag

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(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 = SCNetworkReachabilityFlags(rawValue: 0) 
    if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false { 
     return false 
    } 

    /* Only Working for WIFI 
    let isReachable = flags == .reachable 
    let needsConnection = flags == .connectionRequired 

    return isReachable && !needsConnection 
    */ 

    // Working for Cellular and WIFI 
    let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0 
    let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0 
    let ret = (isReachable && !needsConnection) 

    return ret 

} 
+0

aktualisieren kann, wird es jetzt auf Mobilfunkverbindung arbeiten? weil ich kein physisches Gerät habe, um den Test mit diesem Code auszuführen. DANKE –

+0

Ja, der Code funktioniert, wenn Sie eine Mobilfunkverbindung haben. Ich habe es auf meinem iPhone 6s getestet und es funktioniert perfekt. :) Wenn meine Antwort hilfreich war, kannst du sie bitte als Antwort auf deine Frage markieren? @Fritz Gerald Moran – Siyavash

+0

schon getan. BTW DANKE –

Verwandte Themen