Я использую WKWebView
в моем приложении.Я отправляю запрос URL на webview
.Но этот URL хочет аутентификацию (куки).Я передаю файлы cookie на номер webview
для каждого запроса, но в некоторых случаях он работает нормально, а в некоторых случаях не работает.что здесь не так?
Я сделал следующее:
func loadDataOnWebViewWithCookies(_ urlString: String) {
let url = URL(string: urlString)
let request = URLRequest(url: url!)
if request.url != nil {
var cookies: [String : String]? = nil
if let anURL = request.url, let anURL1 = HTTPCookieStorage.shared.cookies(for: anURL) {
cookies = HTTPCookie.requestHeaderFields(with: anURL1)
}
if cookies?["Cookie"] != nil {
request.addValue(cookies!["Cookie"]!, forHTTPHeaderField: "Cookie")
}
}
self.webView.load(request)
}
Я использую следующий делегат:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if webView.url?.absoluteString != "my_home_url" && webView.url?.host == Constants.kHost {
let headerFields = navigationAction.request.allHTTPHeaderFields
let headerIsPresent = headerFields?.keys.contains("Cookie")
if headerIsPresent! {
decisionHandler(.allow)
} else {
let request = NSMutableURLRequest(url: navigationAction.request.url!)
var cookies: [String : String]? = nil
if let anURL = navigationAction.request.url, let anURL1 = HTTPCookieStorage.shared.cookies(for: anURL) {
cookies = HTTPCookie.requestHeaderFields(with: anURL1)
}
request.allHTTPHeaderFields = cookies
webView.load(request as URLRequest)
decisionHandler(.cancel)
}
} else if webView.url?.host != Constants.kHost {
let tuple = getTokenAndId()
if navigationAction.request.value(forHTTPHeaderField: Constants.headersData.token) == tuple.xToken {
decisionHandler(.allow)
} else {
let request = prepareRequestForHomeService(request: navigationAction.request)
decisionHandler(.cancel)
self.webView.load(request as URLRequest)
}
} else {
decisionHandler(.allow)
}
}
Где я здесь не прав, пожалуйста, помогите мне длятот.Заранее спасибо:)