在Swift中使用WKWebView进行身份验证

在我的iOS应用程序中,我想使用WKWebView在应用程序中包装外部URL 。此URL需要基本身份验证(它需要用户和密码凭据,如以下屏幕截图所示)。

经过一番调查,我尝试使用

didReceiveAuthenticationChallengemethod来启用自动

登录,因此我不了解它的工作原理。

这是我的代码。

import UIKit

import WebKit

class WebViewController: UIViewController, WKNavigationDelegate {

var webView: WKWebView?

private var request : NSURLRequest {

let baseUrl = "https://unimol.esse3.cineca.it/auth/Logon.do"

let URL = NSURL(string: baseUrl)!

return NSURLRequest(URL: URL)

}

/* Start the network activity indicator when the web view is loading */

func webView(webView: WKWebView,

didStartProvisionalNavigation navigation: WKNavigation){

UIApplication.sharedApplication().networkActivityIndicatorVisible = true

}

/* Stop the network activity indicator when the loading finishes */

func webView(webView: WKWebView,

didFinishNavigation navigation: WKNavigation){

UIApplication.sharedApplication().networkActivityIndicatorVisible = false

}

func webView(webView: WKWebView,

decidePolicyForNavigationResponse navigationResponse: WKNavigationResponse,

decisionHandler: ((WKNavigationResponsePolicy) -> Void)){

decisionHandler(.Allow)

}

func webView(webView: WKWebView, didReceiveAuthenticationChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void) {

if challenge.protectionSpace.host == "https://unimol.esse3.cineca.it/auth/Logon.do" {

let user = "*******"

let password = "******"

let credential = NSURLCredential(user: user, password: password, persistence: NSURLCredentialPersistence.ForSession)

challenge.sender?.useCredential(credential, forAuthenticationChallenge: challenge)

}

}

override func viewDidLoad() {

/* Create our preferences on how the web page should be loaded */

let preferences = WKPreferences()

preferences.javaScriptEnabled = false

/* Create a configuration for our preferences */

let configuration = WKWebViewConfiguration()

configuration.preferences = preferences

/* Now instantiate the web view */

webView = WKWebView(frame: view.bounds, configuration: configuration)

if let theWebView = webView {

/* Load a web page into our web view */

let urlRequest = self.request

theWebView.loadRequest(urlRequest)

theWebView.navigationDelegate = self

view.addSubview(theWebView)

}

}

}

I’m facing with this exception:

Terminating app due to uncaught exception 'NSInternalInconsistencyException',

reason: 'Completion handler passed to -[MyUnimol.WebViewController

webView:didReceiveAuthenticationChallenge:completionHandler:] was not called'

If I delete the didReceiveAuthenticationChallenge method, I’m able to reach

the URL but is gives me, obliviously, wrong credentials.

Anyone could explain me what I’m doing wrong please?

回答:

添加以下行:

completionHandler(NSURLSessionAuthChallengeDisposition.UseCredential, credential)

at the end of didReceiveAuthenticationChallenge solved the problem.

以上是 在Swift中使用WKWebView进行身份验证 的全部内容, 来源链接: utcz.com/qa/412130.html

回到顶部