[iOS/WKWebKit] WKWebView에 httpCookie 설정
2024. 9. 8. 16:34
서버에서 받은 쿠키를 이용하여 웹뷰에 넣어서 사용한다고 작업 내용이 전달되었다.
일단 서버에서 HTTP통신으로 헤더(HttpResponse)로 쿠키를 가져왔다.
// HttpResponse에서 쿠키로 변경
func convertHTTPResponseToCookies(httpResponseHeaders: [AnyHashable: Any]) -> [HTTPCookie] {
var cookies: [HTTPCookie] = []
if let headers = httpResponseHeaders as? [String: String] {
for (key, value) in headers {
if key.lowercased() == "Set-cookie" {
let cookieHeader = value
let cookieProperties = HTTPCookie.cookies(withResponseHeaderFields: [key: cookieHeader], for: URL(string: "http://example.com")!)
cookies.append(contentsOf: cookieProperties)
}
}
}
return cookies
}
쿠키를 세팅하고 WKWebViewConfiguration에 WKWebView(init(frame:configuration:))에 추가
let wkDataStore = WKWebsiteDataStore.nonPersistent()
//쿠키를 담을 배열 sharedCookies
let sharedCookies: Array<HTTPCookie> = HTTPCookieStorage.shared.cookies(for: request.url!) ?? []
let dispatchGroup = DispatchGroup()
if sharedCookies.count > 0 {
//sharedCookies에서 쿠키들을 뽑아내서 wkDataStore에 넣는다.
for cookie in sharedCookies{
dispatchGroup.enter()
wkDataStore.httpCookieStore.setCookie(cookie){
dispatchGroup.leave()
}
}
dispatchGroup.notify(queue: DispatchQueue.main) {
//wkDataStore를 configuration에 추가한다.
self.config.websiteDataStore = wkDataStore
self.config.preferences = preferences
//쿠키를 추가한 config를 웹뷰에 넣어준다.
self.webView = WKWebView(frame: self.view.bounds, configuration: self.config)
self.webView.scrollView.bounces = true
}
}
출처
728x90
'iOS > Swift' 카테고리의 다른 글
[Swift] 앱에서 앱 설정으로 이동 (0) | 2024.08.06 |
---|---|
[iOS/WebKit] Completion handler passed to [webView:decidePolicyForNavigationAction:decisionHandler:] was called more than once 오류 (1) | 2024.06.09 |
[Swift] DispatchQueue (3) - DispatchGroup (0) | 2024.04.20 |
[iOS] HTTP Cookie (0) | 2024.03.24 |
[iOS] WKScriptMessageHandler (0) | 2024.03.16 |