我在我的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类型的 –