【问题标题】:Connecting wifi without internet not recognised with NetworkReachabilityManager or ReachabilityNetworkReachabilityManager 或 Reachability 无法识别在没有互联网的情况下连接 wifi
【发布时间】:2018-08-16 13:04:29
【问题描述】:

在尝试检查互联网连接时,我遇到了问题。 在没有互联网的 wifi 上使用 alamofire NetworkReachabilityManager 时:

import Alamofire

class Connectivity {
class func isConnectedToInternet() ->Bool {
    return NetworkReachabilityManager()!.isReachable
 }
}

这是实现:

    if Connectivity.isConnectedToInternet() {
        print("Yes! internet is available.")
    } else {
        print("No! internet is not available.")
    }

我得到:“是的!互联网可用。”当没有活动的互联网连接时(通过 Safari 进行检查)。

用可达性也试过这个:

import Reachability

 class ReachabilityManager: NSObject {

var reachability: Reachability!

static let sharedInstance: NetworkManager = { return NetworkManager() }()


override init() {
    super.init()
    
    reachability = Reachability()!
    
    NotificationCenter.default.addObserver(
        self,
        selector: #selector(networkStatusChanged(_:)),
        name: .reachabilityChanged,
        object: reachability
    )
    
    do {
        try reachability.startNotifier()
    } catch {
        print("Unable to start notifier")
    }
}

@objc func networkStatusChanged(_ notification: Notification) {
    // Do something globally here!
}

static func stopNotifier() -> Void {
    do {
        try (NetworkManager.sharedInstance.reachability).startNotifier()
    } catch {
        print("Error stopping notifier")
    }
}

static func isReachable(completed: @escaping (NetworkManager) -> Void) {
    if (NetworkManager.sharedInstance.reachability).connection != .none {
        completed(NetworkManager.sharedInstance)
    }
}

static func isUnreachable(completed: @escaping (NetworkManager) -> Void) {
    if (NetworkManager.sharedInstance.reachability).connection == .none {
        completed(NetworkManager.sharedInstance)
    }
}

static func isReachableViaWWAN(completed: @escaping (NetworkManager) -> Void) {
    if (NetworkManager.sharedInstance.reachability).connection == .cellular {
        completed(NetworkManager.sharedInstance)
    }
}

static func isReachableViaWiFi(completed: @escaping (NetworkManager) -> Void) {
    if (NetworkManager.sharedInstance.reachability).connection == .wifi {
        completed(NetworkManager.sharedInstance)
    }
}
}

实现是:

NetworkManager.isReachable { networkManagerInstance in
    print("Network is available")
}

NetworkManager.isUnreachable { networkManagerInstance in
    print("Network is Unavailable")
}

我做错了什么?

【问题讨论】:

    标签: ios swift alamofire reachability


    【解决方案1】:

    你是如何检查连接的?您是否尝试过访问任何类似于以下内容的主机。

    do {
            Network.reachability = try Reachability(hostname: "www.google.com")
            do {
                try Network.reachability?.start()
            } catch let error as Network.Error {
                print(error)
            } catch {
                print(error)
            }
        } catch {
            print(error)
        }
    

    【讨论】:

    • 这是正确的方法吗?如果谷歌宕机了怎么办? - 我知道这是一些难以想象的事情,但......可能会发生
    • 不要想象什么是难以想象的 :D。是的,还有其他更好的方法,但我认为我必须尝试到达某个地方,然后才能找到解决方案。
    • @ironRoei 而不是检查谷歌,你可以 ping 你的 API 服务器来检查你的应用程序和服务器之间的通信当前是否可能
    • 谢谢大家! ,还有其他解决方案吗? @SahilManchanda
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 2019-01-07
    • 2016-12-30
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多