iOS 8 didReceiveAuthenticationChallenge未被调用WKWebView Objective C

时间:2015-06-14 07:49:07

标签: ios objective-c ssl-certificate wkwebview

我是iOS开发的新手。我有一个项目,我必须使用WKWebView而不是UIWebView。它是一个简单的网页,使用javascript到Objective-C和其他方式进行整合。它工作正常,除非我尝试打开具有自签名证书的服务器。在Safari上,它会显示一个对话框,我们可以选择继续。但是在我的应用程序中,我无法绕过它。

出于某种原因,我必须使用自签名证书运行它。

从不调用Delegate方法didReceiveAuthenticationChallenge。其他委托方法工作正常。我知道didReceiveAuthenticationChallenge在iOS8中被折旧,但有人可以告诉我解决方法。由于我是新手,因此我们将非常感谢完整的工作委托方法和/或代码中的任何其他更改。

NSURL *url = [NSURL URLWithString:@"https://mywebsite.com/Default.aspx"];

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];

[[self webView] loadRequest:request];

}

// And the delegate method that is not getting called is 
- (void)webView:(WKWebView *)webView
didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
    SecTrustRef serverTrust = challenge.protectionSpace.serverTrust;
    CFDataRef exceptions = SecTrustCopyExceptions(serverTrust);
    SecTrustSetExceptions(serverTrust, exceptions);
    CFRelease(exceptions);

completionHandler(NSURLSessionAuthChallengeUseCredential,
                  [NSURLCredential credentialForTrust:serverTrust]);

}

2 个答案:

答案 0 :(得分:1)

这已被Apple确认为一个错误。它已在iOS9中修复。

答案 1 :(得分:0)

在您发布的代码段中,我没有看到您将该类设置为webview的navigationDelegate ..

您的视图控制器应该实现协议WKNavigationDelegate,您需要为要调用的委托添加以下代码段。

[self webView].navigationDelegate = self;