=================================
=================================
=================================
출처: http://tidev.kr/t/native-webview-cookie/195
안녕하세요.
현재 titanium 으로 열심히 개발을 하고 있고, 곧 완성을 앞두고 있습니다.
다름이 아니라 createHTTPClient() 를 이용해서 로그인을 하고 있습니다.
아이폰에서는 이 createHTTPClient 로 로그인을 하면 webview 에서도 로그인이 되어 있는걸로 나옵니다.
하지만 안드로이드에서는 로그인 되어 있지 않은 상태로 나오네요.
찾아보니 안드로이드는 native 와 webview 간의 cookie 공유가 안된다고 합니다.
http://xyunsikx.tistory.com/entry/안드로이드-POST-Login과-webview-cookie-sync132
지금까지는 createHTTPClient 에서 로그인이 되었을 때 cookie 값을 아래와 같이 propertie 에 저장하고 있습니다.
Ti.App.Properties.setString('cookie', ''+loginReq.getResponseHeader('Set-Cookie')+'');
그런 후 webview 를 띄울 때 아래처럼 cookie 값을 전달하려 하는데 안되네요 -_-;
$.helpdesk.addEventListener('beforeload', function () {
$.helpdesk.evalJS('document.cookie="'+Ti.App.Properties.getString('cookie')+'"');
});
혹시 안드로이드에서는 native 와 webview 사이에 로그인 세션 공유를 어떻게 해야 할까요?
저 같은 경우에는 md5암호화 해서 파라미터로 던져주는데요.
공유가 되면 편리하겠네요.
저도 하다 하다 모르겠어서 그냥 파라미터로 던져주는걸로 수정 했습니다.
답변 고맙습니다~
@paolo2000 님이 첨부한 링크에서 사용한 CookieSyncManager를 이용하면 동기화가 가능하겠군요.
http://developer.android.com/reference/android/webkit/CookieSyncManager.html329
정확한 사용법을 파악한 후 모듈로 만들어 두면 편할 것 같은데 제가 한번 만들어 볼까요? ㅎ
아니면 다른 분이 한번 들어주세요.^^ 참고가 될 만한 gist가 있네요.
https://gist.github.com/kosso/3926162214
안드로이드 모듈을 한번 만들어보았는데
ti의 httpClient로 받은 Set-cookie를 webview에 쓰는 것 까지는 가능했습니다.
그런데 구글 문서에 나와있듯이 동기화는 안되네요.
다음주에 조금 더 해보고 현재 버전이라도 공유할께요.
이런 만들면서 잘 안되길래 검색해봤더니..
3.2 버전에는 cookiemanager가 api로 노출 된답니다.^^
삽질했네요. 덕분에 android 모듈 만들기 살펴봤네요.ㅎㅎ
https://jira.appcelerator.org/browse/TIMOB-15244319
고생 많으셨습니다. 좋은 정보 항상 도움 받고 있습니다.
1 좋아요
10달 후
httpclient에서 로그인기능을 구현하고 webview에서 세션을 공유하고 싶을 경우,
(혹시나 도움이 될까해서 적습니다)
var domain = "example.com";
var path = "/";
var client = Ti.Network.createHTTPClient({
onload : function(e) {
// webview가 사용하는 systemCookie를 삭제합니다. 덮어 쓰고 싶지만 동일 명의 쿠키가 두개 생겨서 문제가 생기네요.
Ti.Network.removeSystemCookies(domain, path, null);
// http클라이언트의 쿠키를 취득해서 webview가 이용하는 systemCookie에 추가합니다. JSESSIONID는 덮어쓰고 싶는 쿠키이름.
var httpClientCookie = Ti.Network.getHTTPCookies(domain, path, "JSESSIONID");
Ti.Network.addSystemCookie(httpClientCookie[0]);
},
onerror : function(e) {
// error
}
});
=================================
=================================
=================================
출처: https://www.fun25.co.kr/blog/android-cookiemanager-webview-session-sharing/?page=7
[안드로이드] android.webkit.CookieManager 를 이용한 웹뷰와의 세션 공유
안드로이드 앱에서 서버와 세션을 HttpURLConnection 등의 HTTP 클라이언트를 이용해서 맺은 후에 웹뷰에서 세션을 이용할려면 아래와 같이 안드로이드에서 제공하는 CookieManager 를 이용하면 됩니다.
HttpURLConnection 의 Set-Cookie 헤더에서 세션 쿠키를 얻어서 CookieManager 에 설정
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
String COOKIES_HEADER = "Set-Cookie";
con.connect();
Map<String, List<String>> headerFields = con.getHeaderFields();
List<String> cookiesHeader = headerFields.get(COOKIES_HEADER);
if(cookiesHeader != null) {
for (String cookie : cookiesHeader) {
String cookieName = HttpCookie.parse(cookie).get(0).getName();
String cookieValue = HttpCookie.parse(cookie).get(0).getValue();
String cookieString = cookieName + "=" + cookieValue;
CookieManager.getInstance().setCookie("https://example.co.kr", cookieString);
}
}
위와 같이 해 두면 CookieManager 는 url 로 해당 쿠키값을 관리를 합니다. 이 값은 앱을 종료하고 다시 실행해도 유지가 되며 웹뷰에서는 해당 사이트로 접속시 자동으로 세션 쿠키값을 세팅해서 접속을 하게 되어 세션이 유지가 됩니다.
API 21 이전까지는 CookieSyncManager 라는것이 있어서 쿠키를 싱크를 해 줘야 했다는데 21 이후부터는 안드로이드 OS 단에서 자동으로 관리를 한다고 합니다.
=================================
=================================
=================================
'스마트기기개발관련 > 안드로이드 개발' 카테고리의 다른 글
안드로이드 Android Studio 프로젝트 라이브러리파일(.jar) 추가하기 (0) | 2020.09.20 |
---|---|
안드로이드 결제 테스트 검증 및 알파/베타 버전 배포 및 테스트 방법 (0) | 2020.09.20 |
안드로이드 개발 인트로 넣기, 런쳐 이미지, 초기화면 관련 (1) | 2020.09.20 |
[안드로이드] android 앱에서 다른 앱 실행 시 값 전달하는 방법 패키지명 또는 URI로 다른앱 실행 방법 관련 (0) | 2020.09.20 |
안드로이드 android TextView 밑줄 긋기, html 의 href 처럼 링크버튼 처럼 사용하기 관련 (0) | 2020.09.20 |
댓글 영역