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 |
Tags
- 리펙터링
- map
- 스위프트
- clean architecture
- swiftUI
- Observable
- tableView
- 애니메이션
- Clean Code
- UITextView
- uitableview
- SWIFT
- 리펙토링
- swift documentation
- UICollectionView
- ios
- uiscrollview
- rxswift
- Xcode
- Human interface guide
- 클린 코드
- RxCocoa
- Protocol
- Refactoring
- ribs
- MVVM
- HIG
- 리팩토링
- collectionview
- combine
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - Swift] WKWebsiteDataStore 웹뷰 데이터(쿠키, 디스크, 메모리, 캐시, 초기화) 관리 방법 본문
iOS 응용 (swift)
[iOS - Swift] WKWebsiteDataStore 웹뷰 데이터(쿠키, 디스크, 메모리, 캐시, 초기화) 관리 방법
jake-kim 2022. 9. 5. 23:24WKWebsiteDataStore 개념
- 웹뷰에서 iOS 네이티브쪽 메모리나 디스크에 데이터를 저장하는 인스턴스
- 웹뷰안에서 웹쪽코드로부터 특정 데이터를 네이티브 단말기의 디스크에 저장하고 싶은 경우, data storage를 사용하는데, 이것을 사용하면 네이티브의 WKWebsiteDataStore를 통해 관리
- 네이티브쪽에서 WKWebsiteDataStore를 가지고 할 수 있는 일
- 웹 사이트에서 사용하는 쿠키 관리
- 웹 사이트가 저장하는 데이터 타입 확인
- 원치 않는 웹 사이트 데이터 제거
ex) WKWebsiteDataStore를 통해 쿠키를 관리하는 코드
- 구체적인 코드는 WebView cookie 설정 글 참고
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)
}
}
}
}
WKWebViewConfiguration.includeCookie(
cookies: [.init()],
completion: { configuration in
guard let config = configuration else { return }
let webView = WKWebView(frame: .zero, configuration: config)
print("쿠키가 세팅된 webView 완성", webView)
})
WKWebsiteDataStore 초기화 방법
- 앱에서 사용자가 로그아웃하거나, 탈퇴하는 경우 초기화해주어야 하는데, 이때 WKWebsiteDataStore에 접근하여 초기화가 필요
- 초기화할때의 데이터 접근은 크게 2가지가 있는데, 디스크에 저장된 곳에 접근하는 default()와 메모리 공간에 접근하는 nonPersistent가 존재
- 디스크에 저장된 데이터들을 초기화하기 위해 default()로 접근
WKWebsiteDataStore.default()
- 데이터를 가져올땐 fetchDataRecords()를 사용
WKWebsiteDataStore.default()
.fetchDataRecords(
ofTypes: WKWebsiteDataStore.allWebsiteDataTypes()
) { records in print(records) }
- 데이터 (records)들에 하나씩 접근하면서 removeData를 사용하여 모두 데이터 삭제
WKWebsiteDataStore.default()
.fetchDataRecords(
ofTypes: WKWebsiteDataStore.allWebsiteDataTypes()
) { records in
records
.forEach {
WKWebsiteDataStore.default()
.removeData(
ofTypes: $0.dataTypes,
for: [$0],
completionHandler: {}
)
}
}
* 전체 코드: https://github.com/JK0369/ExWebView
* 참고
https://developer.apple.com/documentation/webkit/wkwebsitedatastore
'iOS 응용 (swift)' 카테고리의 다른 글
[iOS - Swift] Base64 String 사용 방법 (0) | 2022.09.09 |
---|---|
[iOS - Swift] map, flatMap 이해하기, 직접 구현 방법 (+ json to model, json to dictionary) (0) | 2022.09.06 |
[iOS - swift] Cocoapods을 submodule로 추가해서 사용하는 방법 (:Path => '') (0) | 2022.09.02 |
[iOS - swift] WKWebView 웹뷰 디버깅 하는 방법 (Safari 사용) (0) | 2022.08.19 |
[iOS - swift] 문자열 정규식 처리 방법 (Regex, Regular Expression, 전화번호, 이메일, 비밀번호) (0) | 2022.08.18 |
Comments