2017-08-24 14 views
0

Je construis une application iOS, à un moment où j'avais besoin de vérifier l'accès de l'application à Internet, donc j'ai utilisé la bibliothèque ReachabilitySwift.Vérification de la connexion Internet ou de la connexion wifi avec accessibilitéSwift

Après quelques tests, il me semble que la bibliothèque vérifie seulement si l'appareil a le wifi connecté et ne pas avoir une connexion Internet réelle fournie par mon routeur. Disons que j'ai déconnecté mon routeur d'internet, si mon appareil iOS est connecté via wifi au routeur, l'accessibilité me dit que nous avons une connexion internet où en actuallity mon routeur n'a pas d'internet.

J'ai essayé le joignabilité avec un hôte particulier, mais ayant toujours le même résultat

var reachability = Reachability.init(hostname: "google.com"); 

La bibliothèque de joignabilité censé donner des commentaires lorsque la connexion wifi est perdue ou la connexion Internet réelle est perdue?

Merci d'avance.

+0

vérifier cette URL https://stackoverflow.com/questions/30743408/check-for-internet-connection-with-swift –

+0

Merci @ Lalitkumar, j'ai été partout stackoverflow avant de poster ma question, toutes ces questions don ' t s'attaquer à la mienne, j'essaie d'identifier l'accès à Internet et pas de connexion wifi ou 3/4G. merci bien :) – TheFuquan

+0

Copie possible de [Comment vérifier une connexion Internet active sur iOS ou OSX?] (https: // stackoverflow.com/questions/1083701/comment-vérifier-pour-une-connexion-internet-active-sur-ios-ou-osx) –

Répondre

1

J'ai eu des problèmes similaires avec joignabilité où je faisais le service Web appelle à VPN réseau protégé.

var reachability = Reachability.init(hostname: "google.com"); n'a pas fonctionné pour moi car il est retourné vrai quand il y a une connexion Wifi.

J'utilisé Alamofire réponse lorsqu'un appel factice est fait sur le serveur

func networkIsAvailable(available: (Bool, String?) -> Void) { 

     var message : String = "" 
     DispatchQueue.main.async { 
      HUD.show(.progress) 
      Alamofire.request(Constants.baseUrl, method: .get, parameters: ["foo": "bar"]) 
      .responseJSON(completionHandler: { (response) in 
       let error = response.result.error as? NSError 
       if error?.localizedDescription == networkAlert { 
        message = networkAlert 
        available(false, message) 

       } else if error?.code == cannotConnectServerCode || error?.localizedDescription == cannotConnectServerMessage { 
        message = cannotConnectServerMessage 
        available(false, anotherNetworkAlert) 

       } else { 
        available(true, nil) 
       } 
      }) 
     } 
    } 
+0

Je pense que c'est la route à prendre je suppose que – TheFuquan

0

Dans le Reachablility.h vous pouvez trouver une déclaration:

typedef enum : NSInteger { 
    NotReachable = 0, 
    ReachableViaWiFi, 
    ReachableViaWWAN 
} NetworkStatus; 

Puis, à l'intérieur Reachability classe, vous pouvez trouver la méthode qui retourne le type:

- (NetworkStatus)currentReachabilityStatus; 

Alors, utilisez-le. Dans votre code rapide, vous pouvez le faire comme ceci:

if reachability.currentReachabilityStatus == .ReachableViaWiFi { 
    // Do things... 
} 
+0

Merci, mais comme je l'ai dit, j'ai fait tout cela, ma question était pour confirmer que la bibliothèque reachabiliy vérifie seulement s'il y a une connexion wifi et ne vérifie pas réellement s'il y a un accès Internet réel passant par cette connexion wifi. – TheFuquan

+0

S'il n'y a pas d'accès Internet, vous obtiendrez 'NotReachable', ou je me trompe? – kelin

+0

C'est exactement mon problème, quand je déconnecte mon routeur et connecte mon périphérique ios à mon routeur je continue à obtenir ReachableViaWiFi comme si la bibliothèque vérifie seulement si l'appareil est connecté via wifi à un routeur et ne vérifie pas la connexion internet. – TheFuquan

1

à la WWDC, Apple a dit beaucoup de fois que si vous avez besoin de voir simplement si WiFi ou une cellule est mise à jour - utiliser atteignables. Si vous avez besoin de voir si vous pouvez vous connecter à - alors n'utilisez pas joignable; au lieu de simplement se connecter et gérer l'erreur.

En réalité, il n'est pas vérifié si la connexion à cette ressource IP est possible et si vous souhaitez obtenir un résultat. La seule façon de le faire est d'essayer.

Rechercher des sessions de mise en réseau avec Quinn sur le site WWDC d'Apple pour voir le même conseil.

+0

merci d'avoir réellement adresser la question originale :) pouvez-vous s'il vous plaît référencer la vidéo de la conversation, ou même un document officiel? – TheFuquan