【问题标题】:WKWebView with Basic auth具有基本身份验证的 WKWebView
【发布时间】:2020-06-15 21:16:29
【问题描述】:

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

【问题讨论】:

    标签: ios authentication wkwebview swift5 xcode11


    【解决方案1】:

    您可以使用来自WKNavigationDelegatewebView(_:didReceive:completionHandler:) 回调。从那里您可以输入凭据并对网页进行身份验证。

    你可以像下面这样实现它(伪代码):

    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

    【讨论】:

    • 非常感谢您的回复,我一定是做错了什么,因为添加该代码会给我带来错误。还尝试使代码适应我已经获得的但没有成功。
    • 是的,这是可能的,因为这是我写的草稿。当我有时间时,我会尝试更新我的答案。
    • 再次感谢,您有时间再看一遍代码吗?不幸的是,我无法让它工作。不知道我错过了什么
    【解决方案2】:

    WKNavigationDelegate 必须是类,而不是结构。覆盖UIViewRepresentable 中的makeCoordinator() 以将WKWebView 绑定到WKNavigationDelegate。见this sample code

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 2019-09-27
      • 2013-03-03
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多