私は
WKWebView
を使用しています私のアプリで。私は
webview
にURLリクエストを送信しています
。ただし、この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)
}
}
ここで私が間違っている場合、そのために私を助けてください。 前もって感謝します :)
回答 1 件
@Pallavi:WKWebViewでCookieを渡すには、以下のライブラリを使用してください。
https://github.com/Kofktu/WKCookieWebView
ウェブビューを作成するには、以下のコードをご覧ください。