我在我的iOS應用程序中使用Alamofire。我在viewWillAppear和AppDelegate中使用NSNotifications中的bool值來檢查是否有互聯網連接。如果沒有WiFi連接,彈出窗口會通知用戶。如果有wifi連接,彈出消失,一切正常。只要WiFi顯然不工作,我沒有問題。Alamofire - 當有wifi連接但沒有互聯網連接時該怎麼辦?
我在聚會上,有人向我解釋,它的工作方式是它尋找無線連接而不是互聯網連接。例如,如果我有一個無線路由器,它已插入,但路由器沒有連接到互聯網阿拉莫菲爾將這視爲一個成功的連接,因爲它實際上連接到WiFi,雖然它不知道無線連接不能連接到互聯網。
我只是在我連接到一個開放網絡的情況下,我的應用程序最初回應,就好像我實際上連接到互聯網(沒有彈出),但我無法連接到任何東西。無線信號已滿。在終端,我跑了一個ping,結果證明連接已經死亡。我的應用程序無法區分差異。
如何使彈出出現在這樣的sitaution?
什麼是.case未知?
Alamofire.Swift:
import Foundation
import Alamofire
open class NetworkManager {
open static var sharedManager: NetworkReachabilityManager = {
let reachabilityManager = NetworkReachabilityManager()
reachabilityManager?.listener = { (status) in
switch status {
case .notReachable:
print("The network is not reachable")
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "unsuccessful"), object: nil)
case .unknown : //???????
print("It is unknown wether the network is reachable")
//I'm not sure whether to put a Notification for successful or unsuccessful???
case .reachable(.ethernetOrWiFi):
print("The network is reachable over the WiFi connection")
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "successful"), object: nil)
case .reachable(.wwan):
print("The network is reachable over the WWAN connection")
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "successful"), object: nil)
}
}
reachabilityManager?.startListening()
return reachabilityManager!
}()
}
的AppDelegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
NetworkManager.sharedManager.startListening()
SomeVC:
override func viewWillAppear() {
super.viewWillAppear()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(successful), name: "successful", object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(unsuccessful), name: "unsuccessful", object: nil)
if NetworkManager.sharedManager.isReachable == true{
self.successful()
}else{
self.unsuccessful()
}
if NetworkManager.sharedManager.isReachableOnWWAN == true{
self.successful()
}else{
self.unsuccessful()
}
if NetworkManager.sharedManager.isReachableOnEthernetOrWiFi == true{
self.successful()
}else{
self.unsuccessful()
}
}
func successful(){
//dismiss pop up
}
func unsuccessful(){
//show pop up
}
deinit{
NSNotificationCenter.defaultCenter().removeObserver(self, name: "successful", object: nil)
NSNotificationCenter.defaultCenter().removeObserver(self, name: "unsuccessful", object: nil)
}
}
感謝我來試試。我如何緩存SSID? –
添加得到ssid回答,爲了保存ssid你可以使用用戶默認值或你的數據庫或其他方法 – Dialogue
感謝您的幫助。我是否將該函數添加到Reachability類或SomeVC?你怎麼稱呼它並且用布爾測試?我看到它返回一個可選的String類型的 –