iOS Xcode Swift 환경에서 WKWebView를 사용하여 하이브리드앱을 만들때 자동로그인 처리가 쿠키를 이용해서 하는 경우 동작하지 않는다.
- 기존에 사용했던 디플리케이트된 UIWebView에서는 자동로그인이 잘되었던것 같은데, WKWebView에서는 자동로그인이 동작하지 않는다.
- 서버의 html, Javascript 환경에서 설정한 쿠키는, 단말의 WKWebView에서 조회는 가능하나 변경할 수 없다. 변경해도 일회성이다.
이것 저것 구글링 해가며 테스트 해보았지만 아래와 같이 작업했을때 자동로그인이 정상적으로 동작했다.
PHP 개발환경에서는, PHPSESSID 값이 쿠키에 들어있고, 이값으로 자동로그인을 처리하는데, 이 값이 앱이 종료되고, 다시 실행되어도 유지되는데 초점을 맞추었다.
1) 자동로그인 후 PHPSESSID 값을 UserDefaults 에 저장한다.
if #available(iOS 11.0, *) {
WKWebsiteDataStore.default().httpCookieStore.getAllCookies { (cookies) in
for cookie in cookies{
print("@@@ cookie ==> \(cookie.name) : \(cookie.value)")
if cookie.name == "PHPSESSID" {
UserDefaults.standard.set(cookie.value, forKey:"PHPSESSID")
print("@@@ PHPSESSID 저장하기: \(cookie.value)")
}
}
}
} else {
// Fallback on earlier versions
}
2) 페이지가 불릴때마다 UserDefaults 에 저장된 PHPSESSID 값을 불러와서 일회성으로 PHPSESSID 쿠키값을 넣는다.
let cookie_domain = "m.yourserver.co.kr"
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
let loadedSessid = UserDefaults.standard.value(forKey: "PHPSESSID") as! String?
if let temp = loadedSessid{
print("@@@ PHPSESSID 저장~~: \(temp)")
// 이게 정상동작하는듯.. 자동로그인 됨
let cookieString : String = "document.cookie='PHPSESSID=\(temp);path=/;domain=\(cookie_domain);'"
webView.evaluateJavaScript(cookieString)
}
}
참고 사이트
https://dogfootbirdfoot.tistory.com/27
https://taesulee.tistory.com/6
https://github.com/Kofktu/WKCookieWebView
https://stackoverflow.com/questions/39772007/wkwebview-persistent-storage-of-cookies
'iOS' 카테고리의 다른 글
아이폰, 안드로이드 마켓이동 (0) | 2019.07.01 |
---|---|
모바일 웹에서 마켓으로 이동하기 (0) | 2019.07.01 |
모바일웹에서 앱 호출하기 (0) | 2019.06.19 |
iOS Swift 일정시간 지연후 실행, 타이머 (0) | 2019.06.11 |
아이폰 아이콘에 뱃지 숫자 설정 (0) | 2019.06.07 |