2017-01-18 1 views
-1

Je souhaite implémenter une fonctionnalité dans l'appdelegate qui vérifie la connexion Internet lorsque l'application est en cours d'exécution et affiche les alertes en conséquence.Je ne voudrais pas coder dans chaque classe en vérifiant la connectivité Internet . Est-ce possible? J'utilise aussi Alamofire et SwiftyJson dans le projet.Comment vérifier la connexion Internet dans toute l'application

+0

vous pouvez utiliser AlamofireNetworkActivityIndicator pour cela, [ici] (http://stackoverflow.com/questions/41327325/how-to-check-internet-connection-in-alamofire/41327866#41327866) dans une réponse. –

Répondre

0

Vous pouvez utiliser l'infrastructure SystemConfiguration (Déterminez l'accessibilité du périphérique) pour ce faire. Ensuite, faites un fichier rapide comme l'exemple ci-dessous pour garder les choses propres. Cela va gérer tous les cas. Cela permettra de vérifier pour internet, cellulaire et wifi.

Connection.swift

import SystemConfiguration 


protocol Utilities { 
} 

extension NSObject:Utilities{ 


    enum ReachabilityStatus { 
     case notReachable 
     case reachableViaWWAN 
     case reachableViaWiFi 
    } 

    var currentReachabilityStatus: 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 .notReachable 
     } 

     var flags: SCNetworkReachabilityFlags = [] 
     if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) { 
      return .notReachable 
     } 

     if flags.contains(.reachable) == false { 
      // The target host is not reachable. 
      return .notReachable 
     } 
     else if flags.contains(.isWWAN) == true { 
      // WWAN connections are OK if the calling application is using the CFNetwork APIs. 
      return .reachableViaWWAN 
     } 
     else if flags.contains(.connectionRequired) == false { 
      // If the target host is reachable and no connection is required then we'll assume that you're on Wi-Fi... 
      return .reachableViaWiFi 
     } 
     else if (flags.contains(.connectionOnDemand) == true || flags.contains(.connectionOnTraffic) == true) && flags.contains(.interventionRequired) == false { 
      // The connection is on-demand (or on-traffic) if the calling application is using the CFSocketStream or higher APIs and no [user] intervention is needed 
      return .reachableViaWiFi 
     } 
     else { 
      return .notReachable 
     } 
    } 

} 

Ensuite, vous pouvez l'utiliser comme bon vous semble: Voici un exemple pour vérifier si aucun Internet.

if currentReachabilityStatus == .notReachable { 
     // Internet is offline 
     // show alert or do something. 
    } 
+0

merci pour la réponse. Mais je dois encore implémenter le code dans toutes les classes, n'est-ce pas? –

+0

Non, il suffit de créer un fichier rapide qui est ajouté à votre projet et il sera global – Cliffordwh

+0

Je veux dire ce code: si currentReachabilityStatus == .notReachable { // Internet est en mode hors connexion // montrer l'alerte ou faire quelque chose. } –

0

Ajouter cette classe dans ur projet:

import SystemConfiguration 

open class Reachability { 
class func isConnectedToNetwork() -> 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) 
} 
} 

Utilisez-le où vous voulez comme suit:

if (Reachability.isConnectedToNetwork() == true){ 
     // Do what you want... 
    } 
    else{ 
     //Show alert 
    }