WKWebView с аутентификацией Basi c - PullRequest
1 голос
/ 03 марта 2020

Я пытаюсь создать простое приложение со встроенным веб-сайтом, используя 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)
    }
}

1 Ответ

0 голосов
/ 03 марта 2020

Вы можете использовать обратный вызов 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

...