Bonjour à tous,
Je vous propose aujourd’hui une petite classe très pratique , qui permet tous simplement de vérifier la connexion internet du téléphone. Elle permet de savoir si le device est connecter en wifi, 3g, pas connecter etc…
import Foundation
import SystemConfiguration
let ReachabilityStatusChangedNotification = « ReachabilityStatusChangedNotification »
enum ReachabilityType: CustomStringConvertible {
case wwan
case wiFivar description: String { switch self { case .wwan: return "WWAN" case .wiFi: return "WiFi" } }
}
enum ReachabilityStatus: CustomStringConvertible {
case offline
case online(ReachabilityType)
case unknownvar description: String { switch self { case .offline: return "Offline" case .online(let type): return "Online (\(type))" case .unknown: return "Unknown" } }
}
public class Reach {
func connectionStatus() -> ReachabilityStatus { var zeroAddress = sockaddr_in() zeroAddress.sin_len = UInt8(MemoryLayout<sockaddr_in>.size) zeroAddress.sin_family = sa_family_t(AF_INET) guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, { $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { SCNetworkReachabilityCreateWithAddress(nil, $0) } }) else { return .unknown } var flags : SCNetworkReachabilityFlags = [] if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) { return .unknown } return ReachabilityStatus(reachabilityFlags: flags) } func monitorReachabilityChanges() { let host = "google.com" var context = SCNetworkReachabilityContext(version: 0, info: nil, retain: nil, release: nil, copyDescription: nil) let reachability = SCNetworkReachabilityCreateWithName(nil, host)! SCNetworkReachabilitySetCallback(reachability, { (_, flags, _) in let status = ReachabilityStatus(reachabilityFlags: flags) NotificationCenter.default.post(name: Notification.Name(rawValue: ReachabilityStatusChangedNotification), object: nil, userInfo: ["Status": status.description]) }, &context) SCNetworkReachabilityScheduleWithRunLoop(reachability, CFRunLoopGetMain(), RunLoopMode.commonModes as CFString) }
}
extension ReachabilityStatus {
init(reachabilityFlags flags: SCNetworkReachabilityFlags) {
let connectionRequired = flags.contains(.connectionRequired)
let isReachable = flags.contains(.reachable)
let isWWAN = flags.contains(.isWWAN)if !connectionRequired && isReachable { if isWWAN { self = .online(.wwan) } else { self = .online(.wiFi) } } else { self = .offline } }
}
Pour l’utiliser c’est très facile :
let check = Reach().connectionStatus()
switch check {
case .online(.wifi):
//connecter au wifi
case .online(.wwan):
// connecter au reseau mobile
case .offline:
// pas de connexion
case .unknown:
//
default:
//le code
}
Happy coding