通过将cookie从HTTPCookieStorage复制到WKWebsiteDataStore来设置WKWebView的cookie时出现的问题

问题描述 投票:0回答:1

我想在我的iOS应用中的WKWebView中显示一个网站,为此我需要为用户的会话设置特定的http cookie。 Cookie已存储在应用程序的共享HttpCookieStorage中。

目前,我尝试将它们从那里复制到Web视图的WKWebsiteDataStore,然后用以下代码加载网站:

class ViewerViewController: UIViewController {

    // MARK: - Properties
    var webView: WKWebView!

    // MARK: - Life Cycle
    override func loadView() {
        webView = WKWebView()
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        addCookiesToWebView {
            print("Load website")
            if let url = Bundle.main.url(forResource: "MyWebsite", withExtension: "html"), let html = try? String(contentsOf: url) {
                self.webView.loadHTMLString(html, baseURL: url)
            }
        }   
    }

    // MARK: - Functions
    func addCookiesToWebView(completionHandler: @escaping (() -> Void)) {
        let sharedCookies = HTTPCookieStorage.shared.cookies!
        let webViewCookieStore = webView.configuration.websiteDataStore.httpCookieStore
        var count = 0
        sharedCookies.forEach { cookie in
            DispatchQueue.main.async {
                webViewCookieStore.setCookie(cookie) {
                    count += 1
                    print("Added cookie \(cookie.name)")
                    if count == sharedCookies.count {
                        completionHandler()
                    }
                }
            }
        }
    }
}

现在,对我来说令人不解的是,这有时可行,并且用户在其用户会话中通过了身份验证,但有时没有。

似乎在复制所有Cookie之前,可能存在一种竞争状况导致Web视图加载网站?当我研究此问​​题时,我注意到WKWebView中的其他人也有cookie的问题,但到目前为止,我还没有找到任何能真正解决我问题的解决方案。

我的代码中是否有错误,或者是否有更好的方法将多个Cookie从HttpCookieStorage复制到WKWebView?

ios swift cookies webkit wkwebview
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.