【问题标题】:How can I check if a server is available using Reachability如何使用可达性检查服务器是否可用
【发布时间】:2018-09-02 14:47:37
【问题描述】:

我正在尝试找出如何最好地确定页面在 iOS 中是否可用。我有一个可以查看 URL 请求代码的 WKWebView,它适用于 404、500 等。但是,当预期的 URL 的服务器可能关闭时,我不确定如何处理对 URL 的请求。我的 WKWebView 启动导航委托方法触发,然后什么也没有。我的网络请求似乎消失了。

例如,Chrome 会返回一条消息“无法访问此站点 chess.math.science.google.com 的服务器 IP 地址找不到。”

我已经在我的didStartProvisionalNavigation 委托方法中包含了 iOS Reachability 类,这就是说 URL 应该可以通过 WIFI 访问,虽然不是不正确,但不会检查 URL 是否有任何要返回的内容。

应用日志:

2018-03-23 16:28:54.142105-0400 MyApp[1245:774884] INTERNET REACHABLE
2018-03-23 16:28:54.272582-0400 MyApp[1245:774884] WKWEBVIEW DID START NAVIGATION
2018-03-23 16:28:54.274085-0400 MyApp[1245:774884] NETWORK STATUS FOR URL chess.math.science.google.com: 2
(lldb) po netStatus
ReachableViaWiFi

代码:

-(void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
    NSLog(@"WKWEBVIEW DID START NAVIGATION");
     Reachability* tinyReach = [Reachability reachabilityWithHostname:webView.URL.absoluteString];
    NetworkStatus netStatus = [tinyReach currentReachabilityStatus];
    NSLog(@"NETWORK STATUS FOR URL %@: %li", webView.URL.absoluteString, netStatus);
    if(netStatus == NotReachable) {
        NSLog(@"NOT REACHABLE");

【问题讨论】:

标签: ios objective-c wkwebview reachability


【解决方案1】:

你需要实现WKNavigationDelegate的webView:didFailProvisionalNavigation:withError:方法。 (参见https://developer.apple.com/documentation/webkit/wknavigationdelegate/1455637-webview?language=objc),然后在网络视图上设置您的代理:

self.webView.navigationDelegate = myDelegate; // maybe self

此方法报告网络错误,包括超时错误和 DNS 解析错误。他们通常有一个 error.domain = NSURLErrorDomain (NSString) 和 error.code 来自 NSURLErrorDomain 枚举。

例如,如果服务器由于某种原因在 60 秒内没有响应,您将得到 NSURLErrorTimedOut,还有许多其他可能的错误,例如 NSURLErrorCannotConnectToHost 和 NSURLErrorNotConnectedToInternet。 The list is here 或在 NSURLError.h 标头中。

附:可达性 API 更适合于提示用户可能有问题,而不是将其用作主要的事实来源。尝试运行请求并得到真正的错误总是更好(并得到 Apple 工程师的建议),而不是依赖于一些可达性指示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多