Ios 具有基本身份验证的WKWebView

Ios 具有基本身份验证的WKWebView,ios,authentication,wkwebview,swift5,xcode11,Ios,Authentication,Wkwebview,Swift5,Xcode11,我正在尝试创建一个简单的应用程序,使用WebView嵌入一个网站,除了我不知道如何对需要凭据的网站进行身份验证之外,一切都正常。 我在网上搜索了几个小时,终于放弃了寻找答案。可能只是我不知道该用什么措辞。 希望这里的任何人都知道硬编码凭证的方法,或者最好是用户输入自己凭证的方法 谢谢 我使用的代码是最简单的,如下所示: import SwiftUI import WebKit struct ContentView: View { var body: some View {

我正在尝试创建一个简单的应用程序,使用
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)
    }
}

您可以使用
WKNavigationDelegate
中的
webView(uuxAE:didReceive:completionHandler:)
回调。从那里,您可以输入凭据并对网页进行身份验证

您可以按照以下方式实现它(伪代码):

请在此处阅读更多信息:


WKNavigationDelegate必须是类,而不是结构。重写
UIViewRepresentable
中的
makeCoordinator()
,将
WKWebView
绑定到
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)
    }
}