簡體   English   中英

當設備連接到某個熱點並且該熱點的移動數據已關閉時,如何檢查網絡可達性

[英]How to check network reachability when the device is connected to some hotspot and that hotspot's mobile data is off

我正在使用 Almofire 來實現網絡可達性。 這是場景:

  1. 將 iPad/iPhone 連接到移動熱點。
  2. 現在打開移動數據,檢查網絡可達性狀態。 它會返回真值。 那也行
  3. 現在關閉移動數據,但iPad/iPhone與熱點設備之間仍然存在熱點連接。
  4. 現在檢查網絡可達性狀態,它會再次返回 true。 理想情況下它應該返回 false,因為服務器不可訪問。
class ReachabilityManager: NSObject {

  static let shared = ReachabilityManager()

  let reachabilityManager = Alamofire.NetworkReachabilityManager(host: "my.server.url")

  var isReachable : Bool {

    return reachabilityManager?.isReachable ?? false

  }

}

也許嘗試用NWPathMonitor替換 reachability 。

它更加可靠,並為您提供更多選擇。

這是一個例子:

import Network 

let monitor = NWPathMonitor()

func monitorNetwork() {
    monitor.pathUpdateHandler = { path in
        if path.status == .satisfied {
            connectionAvailable = true
        } else {
            connectionAvailable = false
        }
    }
    let queue = DispatchQueue(label: "Net")
    monitor.start(queue: queue)
}

您還可以檢查用戶是否正在使用蜂窩數據或連接到熱點:

path.isExpensive

根據文檔:

一個 Boolean 指示路徑是否使用被認為是昂貴的接口,例如蜂窩或個人熱點。

此外,您可以檢查各種連接要求或類型:

let monitor = NWPathMonitor(requiredInterfaceType: .cellular)

這為您提供了更多選項,例如:.wifi、wierdEthe.net、環回等。

請參閱以下文檔: NWInterface.InterfaceType

讓可達性=可達性()!

//This function is find to wifi or Cellular network
reachability.whenReachable = { reachability in
    if reachability.connection == .wifi {
        print("Reachable via WiFi")
    } else {
        print("Reachable via Cellular")
    }
}

//When Network is Off This Function Call
reachability.whenUnreachable = { _ in
    print("Not reachable")
}

//This code is automatically call when network is on.
do {
    try reachability.startNotifier()
} catch {
    print("Unable to start notifier")
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM