2017-08-24 109 views
0

我正在建設一個iOS應用程序,在某些時候我需要檢查應用程序的互聯網訪問,所以我使用ReachabilitySwift庫。檢查互聯網連接或無線連接與reachabilitySwift

經過一些測試後,在我看來,該庫只會檢查設備是否連接了wifi並且沒有從我的路由器提供實際的Internet連接。

可以說我斷開我的路由器從互聯網,如果我的iOS設備通過WiFi連接到路由器,可達性告訴我,我們有互聯網連接,在真正的我的路由器沒有互聯網。

我試圖用一個特定的主機是否可達,但仍然有同樣的結果

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

應該給予反饋當WiFi連接丟失或實際的網絡連接丟失的可達性圖書館嗎?

預先感謝您。

+0

檢查此網址https://stackoverflow.com/questions/30743408/check-for-internet-connection-with-swift –

+0

感謝@Lalitkumar,我發佈我的問題之前已經遍佈了stackoverflow,所有這些問題不' t解決我自己的,我試圖確定互聯網訪問,而不是WiFi或3/4G連接。非常感謝:) – TheFuquan

+0

[如何檢查iOS或OSX上的活動Internet連接?](https:// stackoverflow。問題/ 1083701 /如何檢查爲主動互聯網連接上的IOS或OSX) –

回答

1

我在那裏做web服務我有過類似的問題與可達性要求與VPN保護的網絡。

var reachability = Reachability.init(hostname: "google.com"); 沒有爲我工作,因爲它有WiFi連接時返回true。

我用Alamofire響應時,虛擬呼叫服務器

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

我認爲這是我想要的路線 – TheFuquan

0

Reachablility.h你可以找到一個聲明:

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

然後,裏面Reachability類,你可以找到方法,它返回類型:

- (NetworkStatus)currentReachabilityStatus; 

因此,使用它。在您的SWIFT代碼,你可以做這樣的:

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

謝謝,但就像我一直在說,我已經做了所有這些,我的問題是確認實驗室只檢查是否有wifi連接,而不是實際檢查是否有實際的互聯網訪問通過WiFi連接。 – TheFuquan

+0

如果沒有互聯網接入,你會得到'NotReachable',或者我錯了? – kelin

+0

這正是我的問題,當我斷開我的路由器並將我的ios設備連接到我的路由器時,我一直在獲取ReachableViaWiFi,就好像該庫僅檢查設備是否通過WiFi連接到路由器而不檢查Internet連接。 – TheFuquan

1

在WWDC做,蘋果已經說了很多很多次,如果你需要簡單地看,如果Wi-Fi或達 - 可到達。如果你需要看看你是否可以連接到 - 然後不使用可達;而只需連接並處理錯誤。

可達並不實際檢查它是否可以連接到該基於IP的資源,並且如果您要返回結果。要做到這一點的唯一方法就是實際嘗試。

在Apple的WWDC網站上查找與Quinn的聯網會話,以查看相同的建議。

+0

感謝你實際上解決原來的問題:) 你可以請參考談話的視頻,甚至一些官方文件? – TheFuquan