NetworkReachabilityManager 或 Reachability 无法识别在没有互联网的情况下连接 wifi
Posted
技术标签:
【中文标题】NetworkReachabilityManager 或 Reachability 无法识别在没有互联网的情况下连接 wifi【英文标题】:Connecting wifi without internet not recognised with NetworkReachabilityManager or Reachability 【发布时间】: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")
我做错了什么?
【问题讨论】:
【参考方案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 ***.com/questions/30743408/…以上是关于NetworkReachabilityManager 或 Reachability 无法识别在没有互联网的情况下连接 wifi的主要内容,如果未能解决你的问题,请参考以下文章