我是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]);
}
答案 0 :(得分:1)
这已被Apple确认为一个错误。它已在iOS9中修复。
答案 1 :(得分:0)
在您发布的代码段中,我没有看到您将该类设置为webview的navigationDelegate ..
您的视图控制器应该实现协议WKNavigationDelegate
,您需要为要调用的委托添加以下代码段。
[self webView].navigationDelegate = self;