개발

WKWebView 간편하게 쿠키(세션) 유지 시키기!

소소ing 2020. 11. 19. 16:23
반응형

해당 글에서 코드 부분은 파란색으로 표기 됩니다.

해당 글에서 중요 부분은 붉은색으로 표기 됩니다.

 

iOS WKWebView를 이용하여 세션을 유지하려면 여러가지로 설정을 해주어야 한다. 
이 부분을 간단하게 구성을 해보고자 WKCustomWebView 모듈을 Cocopods에 업로드 하였다. 
여기서는 해당 라이브러리 사용법에 대해서 안내한다. 

앱 종료 후에도 세션 유지 or ViewController 간 또는 WKWebView 간의 세션 유지를 위해서라면 도움이 될듯 하다.

 

[자체 제작한 WKCustomWebView 사용방법]

1. 라이브러리 연동 방법 

pod 'WKCustomWebView'

 

2. WKCustomWebView를 사용할 화면에서 Lazy 객체 생성 및 초기화

// InappAlert Class import

import WKCustomWebView

 

// WKCustomWebView 변수 간편 생성 or 상세 설정 생성으로 객체 생성

// (간편 생성 방법)

// - frame : WKCustomWebView를 그릴 Frame 지정

lazy var wkWebView: WKCustomWebView = {

    let webView: WKCustomWebView = WKCustomWebView(frame: CGRect.init(x: 0, y: 0, width: self.mainView.frame.size.width, height: self.mainView.frame.size.height))

    return webView

}()

 

// (상세 설정 생성 방법)

// - frame : WKCustomWebView를 그릴 Frame 지정

// - userDefault : 앱에서 사용할 UserDefault 객체 전달 (쿠키 정보 저장을 위해 사용)

// - uDCookie : 앱에서 사용할 UserDefault에 저장할 키 이름 

// - saveCookieName : Cookie중 저장할 쿠키 문자열 (포함검색) 

// - deleteCookieName : Cookie 중 삭제할 쿠기 문자열 (포함검색) 

lazy var wkWebView: WKCustomWebView = {

    let webView: WKCustomWebView = WKCustomWebView(frame: CGRect.init(x: 0, y: 0, width: self.mainView.frame.size.width, height: self.mainView.frame.size.height), userDefault: <UserDefault 객체>, uDCookie: "쿠키 저장 키이름", saveCookieName: "저장할 쿠키 문자열", deleteCookieName: "삭제할 쿠키 문자열")

    return webView

}()

// userDefault or uDcookie or saveCookieName or deleteCookieName 의 값은 필수 값이 아니므로 설정을 하지 않아도 된다.

// - userDefault와 uDcookie의 경우 값을 지정하지 않으면 기본 설정 값을 사용한다.

// - saveCookieName의 값을 지정하지 않을경우 모든 쿠키를 저장, 값을 지정할 경우 해당 값에 포함되는 쿠키만 저장한다.

// - deleteCookieName의 값을 지정하지 않을경우 유효기간이 만료 된 쿠키만 삭제, 값을 지정할 경우 추가로 지정된 이름이 포함된 쿠키도 삭제한다.

 

 

3. WKWebView 딜리게이트 사용이 필요할 경우 WKCustomWebView에서 설정 방법

// 딜리게이트 이용시 기존 WKWebView의 딜리게이트를 넣어주어야 한다.

// - WKNavigationDelegate, WKUIDelegate

class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {

    // ... 생략 ...

 

    // WKWebView의 WKUIDelegate 이용시

    self.wkWebView.uiDelegate = self

    // WKWebView의 WKNavigationDelegate를 이용하려면 아래 구문으로 선언해 주어야 한다.    

    self.wkWebView.wkNavigationDelegate = self

 

    // WKNavigationDelegate 안 navigationAction 함수 대신 아래 함수 사용

    self.wkWebView.onDecidePolicyForNavigationAction = { (webView, navigationAction, decisionHandler) in

        decisionHandler(.allow)

    }

 

    // WKNavigationDelegate 안 navigationResponse 함수 대신 아래 함수 사용

    self.wkWebView.onDecidePolicyForNavigationResponse = { (webView, navigationResponse, decisionHandler) in

        decisionHandler(.allow)

    }

}

 

4. WKCustomWebView 창간 이동시 세션 유지

// A ViewController <-> B ViewController 간 세션 유지를 위해서 B에서 A로 돌아갈때 창이 종료되는 시점에서 애라 함수 호출

// 세션 업데이트만 원할 경우

self.wkWebView.WKCustomWebViewSC()

// 세션 업데이트 후 웹뷰를 리로드 할 경우

self.wkWebView.WKCustomWebViewSCandRload()

 

반응형