Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- uiscrollview
- map
- Clean Code
- swift documentation
- 리펙토링
- Observable
- ios
- RxCocoa
- 리팩토링
- clean architecture
- 애니메이션
- tableView
- Human interface guide
- Protocol
- uitableview
- 클린 코드
- collectionview
- swiftUI
- SWIFT
- Xcode
- 스위프트
- ribs
- MVVM
- UICollectionView
- Refactoring
- rxswift
- HIG
- combine
- 리펙터링
- UITextView
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] WebView cookie 설정 (cache) 본문
WebView 쿠키 설정 방법
- 원리: 웹뷰 객체를 생성할 때 WKWebView(frame:configuration:), configuration에 데이터 정보(쿠키정보 넣고 그 쿠키정보가 이전에 존재하면 캐시되는 원리)
- 종속성
import WebKit
- 쿠키는 WKWebViewConfiguration()에 저장되며, WebView를 초기화 할 때 객체로 넘겨주면 cache완료
- WKWebViewConfiguration 객체에 cookie(HTTPCookie객체)를 저장하는 extension 추가
- DispatchGroup 개념: Dispatch Group 활용 - 코드 실행 순서 정의부분 참고
- completion을 사용하는 이유는 async하게 접근 종료 후 completion이 실행되는 것을 보장하기 위함
extension WKWebViewConfiguration {
static func includeCookie(cookies: [HTTPCookie], completion: @escaping (WKWebViewConfiguration?) -> Void) {
let config = WKWebViewConfiguration()
let dataStore = WKWebsiteDataStore.nonPersistent()
DispatchQueue.main.async {
let waitGroup = DispatchGroup()
for cookie in cookies {
waitGroup.enter()
dataStore.httpCookieStore.setCookie(cookie) {
waitGroup.leave()
}
}
waitGroup.notify(queue: DispatchQueue.main) {
config.websiteDataStore = dataStore
completion(config)
}
}
}
}
- cookie를 가지고 WebConfiguration를 초기화 하는 함수 추가
func prepareWebConfiguration(completion: @escaping (WKWebViewConfiguration?) -> Void) {
guard let authCookie = HTTPCookie(properties: [
.domain: ServiceConfiguration.webBaseDomain,
.path: "/",
.name: authTokenCookieName, // "CID_AUT"
.value: KeychainService.shared.getUserAccessToken(),
.secure: "TRUE",
]) else {
return
}
guard let uuidCookie = HTTPCookie(properties: [
.domain: ServiceConfiguration.webBaseDomain,
.path: "/",
.name: uuidCookieName, // "CID_AUT"
.value: KeychainService.shared.getUUID(),
.secure: "TRUE",
]) else {
return
}
WKWebViewConfiguration.includeCookie(cookies: [authCookie, uuidCookie]) {
completion($0)
}
}
- 위에서 정의한 두 함수를 가지로 cookie설정된 config를 통해서 webView 초기화
prepareWebConfiguration { [weak self] in
if let config = $0 {
webView = WKWebView(frame: .zero, configuration: config)
}
}
'iOS 응용 (swift)' 카테고리의 다른 글
[iOS - swift] RxGesture (+ tapGesture 바인딩 시 emit 현상 해결 방법) (0) | 2021.01.24 |
---|---|
[iOS - swift] computed property와 @IBInspectable 사용 방법 (0) | 2021.01.23 |
[iOS - swift] R.swift 프레임워크, Localization, Localizable (0) | 2021.01.20 |
[iOS - swift] 드래그하여 view움직이기 (draggable view) UIPanGestureRecognizer (0) | 2021.01.17 |
[iOS - swift] Fake GPS, 가상 위치 설정 (iTools) (0) | 2021.01.15 |
Comments