[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
    }
}

 

 

출처

 

WKWebView에서 쿠키 세팅하기

swift를 배우지도 않고 갑자기 iOS 앱을 개발해야 했었다..ㅋㅋㅋ 하이브리드 앱이라서 웹뷰 하나 띄우면 되니깐 "일주일이면 충분하지?" 음... iOS 개발자에겐 넉넉한 시간이겠지만... 껄껄 예.. 하

dailylonnie0125.tistory.com

 

728x90

BELATED ARTICLES

more