웹 버전 체크 가이드(IOS)
앱 구동시 쿠키 및 캐시 초기화
WebViewController 앱 시작할때마다 남아있던 정보들을 제거하고 다시 넣어주는 경우가 있다. WKWebView에서 제공하는 httpCookieStore 라는 쿠키 저장소를 통해 쿠키를 관리할 수 있다.
WKWebView Extension에 setCookie 함수를 선언한다.
웹뷰 로드 전 데이터를 클리어를 진행한다.
func resetCookie(_ completion: @escaping (() -> Void)) { let cacheDataTypes: Set<String> = [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache, WKWebsiteDataTypeCookies] let date = Date(timeIntervalSince1970: 0) WKWebsiteDataStore.default().removeData( ofTypes: cacheDataTypes, modifiedSince: date, completionHandler: { print("Cookie, Cache 삭제") } ) }데이터 클리어 진행 후 웹뷰 로드 전 필요한 쿠키를 생성하고 setCookie 함수를 통해 삽입한다.
func setCookie() { var cookies = [HTTPCookie]() let testCookie = HTTPCookie(properties: [ .domain: "https://chamomile-mobile.lotteinnovate.com", .path: "/", .name: "test_cookie", .value: "Y" ])! cookies.append(testCookie) for cookie in cookies { webView.setCookie(cookie) } }웹뷰 로드 전 호출
백그라운드 시간 체크
SceneDelegate
SceneDelegate 내 sceneWillEnterForeground, sceneDidEnterBackground 활용
SceneWillEnterForeground: 앱이 포그라운드 진입시 호출 SceneWillEnterBackground: 앱이 백그라운드 진입시 호출 timeIntervalSince 함수를 통해 백그라운드 진입 이후부터 흐른 시간을 체크 NotificationCenter를 통해 뷰 컨트롤러에 시간 전달func sceneWillEnterForeground(_ scene: UIScene) { guard let start = UserDefaults.standard.object(forKey: "sceneDidEnterBackground") as? Date else { return } let interval = Int(Date().timeIntervalSince(start)) NotificationCenter.default.post(name: NSNotification.Name("sceneWillEnterForeground"), object: nil,userInfo: ["time" : interval]) } func sceneDidEnterBackground(_ scene: UIScene) { NotificationCenter.default.post(name: NSNotification.Name("sceneDidEnterBackground"), object: nil) UserDefaults.standard.setValue(Date(), forKey: "sceneDidEnterBackground") }
ViewController
웹뷰가 존재하는 ViewController 내 NotificationCenter Observer 등록
addbackGroundTime: 포그라운드 진입시 체크된 시간을 전달받아 지정된 시간보다 머무를 경우 현재 웹 버전 체크 stopTimer: 타이머 정지
WebVersion 체크
버전체크 API 통신을 통해 현재 디바이스에 가지고 있던 웹 버전과 서버 웹 버전을 비교
서버 버전이 더 클 경우 캐시 제거 함수 호출 후 서버 버전을 디바이스에 저장
extension WKWebView { func removeData() { let cacheDataTypes: Set<String> = [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache] let date = Date(timeIntervalSince1970: 0) WKWebsiteDataStore.default().removeData( ofTypes: cacheDataTypes, modifiedSince: date, completionHandler: { print("Cookie, Cache 삭제") } ) } }
로그아웃시 웹 캐시 초기화
로그아웃 직후 webView.removeData() 호출
extension WKWebView { func removeData() { let cacheDataTypes: Set<String> = [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache, WKWebsiteDataTypeCookies] let date = Date(timeIntervalSince1970: 0) WKWebsiteDataStore.default().removeData( ofTypes: cacheDataTypes, modifiedSince: date, completionHandler: { print("Cookie, Cache 삭제") } ) } }