我正在尝试创建一个使用WebView
嵌入网站的简单应用程序,一切正常,除了我不知道如何针对需要凭据的网站进行身份验证。
我在网上搜索了几个小时,最后放弃了寻找答案的机会。可能只是因为我不知道使用什么措辞。
希望这里的任何人都知道一种对凭据进行硬编码的方法,或者最好是一种让用户输入自己的凭据的方法。
谢谢!
我正在使用的代码是最简单的,如下所示:
import SwiftUI
import WebKit
struct ContentView: View {
var body: some View {
NavigationView {
VStack {
WebView(request: URLRequest(url: URL(string: "https://siteurl")!))
}.navigationBarTitle("Example Text")
}
}
}
struct WebView: UIViewRepresentable {
let request: URLRequest
func makeUIView(context: Context) -> WKWebView {
return WKWebView()
}
func updateUIView(_ uiView: WKWebView, context: Context) {
uiView.load(request)
}
}
答案 0 :(得分:2)
您可以使用webView(_:didReceive:completionHandler:)
中的WKNavigationDelegate
回调。从那里您可以输入凭据并通过网页进行身份验证。
您可以像以下(伪代码)一样实现它:
struct WebView: UIViewRepresentable, WKNavigationDelegate {
func makeUIView(context: Context) -> WKWebView {
let webView = WKWebView()
webView.navigationDelegate = self
return webView
}
func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge,
completionHandler: @escaping(URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
let credential = URLCredential(user: "username",
password: "password",
persistence: .forSession)
completionHandler(.useCredential, credential)
}
}
在此处了解更多信息
https://developer.apple.com/documentation/webkit/wknavigationdelegate/1455638-webview
答案 1 :(得分:0)
WKNavigationDelegate
必须是类,而不是结构。覆盖makeCoordinator()
中的UIViewRepresentable
,将WKWebView
绑定到WKNavigationDelegate
。参见this sample code。