안드로이드 웹뷰 CookieSyncManager 정확한 사용법
페이지 정보
작성일 23-03-05 17:22
본문
안드로이드의 웹뷰를 사용함에 있어 쿠키 동기화가 잘 안 된다던가 인증이 지꾸 풀린다던가 하는 경험이 한번쯤은 있을 것이다.
인터넷을 찾아보면 CookieSyncManager로 동기화를 하면 된다고는 하지만, 건헐적으로 동작하지 않을 때가 있다.
어떻게 하면 정확하게 할수 있는지 알아보도록 하자.
먼저, 안드로이드에서 CookieManager는 두 개의 다른 클래스가 있다.
java.net.CookieManager
android.webkit.CookieManager
여기서 1번은 논외다. 웹뷰하고는 전혀 상관이 없고, UrlConnection을 통해 HTTP API 통신을 할 때, 쿠키를 관리하는 용도다.
2번이 웹뷰가 사용하는 쿠키를 관리하는 용도이다.
CookieSyncManager는 브라우저 쿠키를 RAM과 영구 저장소 사이에서 동기화한다. 최상의 성능을 내기 위해, 브라우저 쿠키는 RAM에 저장되고, 별도의 쓰레드가 타이머에 의해 이 둘간에 동기화를 한다.
다음은 정확한 사용법이다. 인터넷에 보면 사용법은 많이 나와있지만, 모든 상황을 전부 고려하지는 못했다.
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); webView = (WebView) findViewById(R.id.webView); webView.setWebViewClient(webViewClient); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { //noinspection deprecation CookieSyncManager.createInstance(this); } }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); webView = (WebView) findViewById(R.id.webView); webView.setWebViewClient(webViewClient); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { //noinspection deprecation CookieSyncManager.createInstance(this); } }
@Override protected void onPause() { super.onPause(); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { //noinspection deprecation CookieSyncManager.getInstance().stopSync(); } }
WebViewClient webViewClient = new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { /* NOTICE 로그인을 한 다음 앱을 종료하고, 다시 앱을 실행했을 때 간헐적으로 로그인이 안 된 상태가 된다. 이는 웹뷰의 RAM과 영구 저장소 사이에 쿠키가 동기화가 안 되어 있기 때문이다. 따라서 강제로 동기화를 해준다. */ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { //noinspection deprecation CookieSyncManager.getInstance().sync(); } else { // 롤리팝 이상에서는 CookieManager의 flush를 하도록 변경됨. CookieManager.getInstance().flush(); } }
핵심은 WebViewClient의 onPageFinished() 메소드에서 강제 sync가 필요하다는 것.
추천
0
비추천
0
- 이전글 get_paging 페이징함수 1페이지 일때 page변수 사용하지 않게 변경 23.03.06
- 다음글 MySQL 1분전, 하루전, 한시간전, 하루전, 한달전 데이터 조회 23.02.23