📅  最后修改于: 2023-12-03 15:05:58.488000             🧑  作者: Mango
WKWebView是iOS 8开始引入的一种新的渲染引擎,相比于UIWebView,WKWebView支持多进程,内存占用更少,更具安全性和速度。在进行iOS应用开发中,我们经常需要在原生应用中加载Web内容,这时就需要用到WKWebView。
在WKWebView中,didReceive方法是当服务器接收到身份验证挑战时调用的方法。这个方法有两个参数,第一个参数是一个WKWebView对象,第二个参数是一个URL认证挑战对象。
以下是WKWebViewDelegate协议中的方法声明:
optional func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge,
completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void)
当调用该方法时,我们需要使用认证挑战对象中的凭据,来创建一个URL凭据对象,并传递给completionHandler回调。completionHandler的第一个参数,是一个URLSession.AuthChallengeDisposition枚举类型,表示是否接收来自服务器的认证挑战。第二个参数是一个凭据对象,如果接收认证挑战,则需要返回有效的凭据,否则可以返回nil。
以下是一个简单的示例,演示了如何使用didReceive方法来响应身份验证挑战:
func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
guard let serverTrust = challenge.protectionSpace.serverTrust else {return completionHandler(.performDefaultHandling, nil)}
completionHandler(.useCredential, URLCredential(trust: serverTrust))
}
在此示例中,我们首先检查挑战中是否存在服务器信任。如果存在,则将其传递给URLCredential,然后返回挑战响应,表示接受该挑战。如果不存在,则调用completionHandler,并使用AuthChallengeDisposition.performDefaultHandling来通知应用程序执行默认操作。
WKWebView作为一种新的Web渲染引擎,比UIWebView更加先进和有用。在使用WKWebView加载Web内容时,我们经常需要使用didReceive方法响应来自服务器的身份验证挑战。我们需要创建一个URLCredential对象,并根据服务器信任是否存在,选择返回挑战响应或默认处理。