Android/안드로이드 WebView에 localStorage 사용하는 방법

✨ 개요

localStorage도메인(오리진) 단위로 영구 저장되는 클라이언트 저장소입니다.
안드로이드 WebView에서도 설정만 맞추면 브라우저처럼 동작하며, 로그인 상태 유지, 온보딩 플래그, UI 캐시 등에 유용합니다.


1. 핵심 요약


2 필수 설정

@SuppressLint("SetJavaScriptEnabled")
fun WebView.enableDomStorage() = apply {
        settings.javaScriptEnabled = true
        settings.domStorageEnabled = true      // ★ localStorage/sessionStorage 사용
    }

3 JS에서 사용하는 방법

// 저장
localStorage.setItem("token", "abc123");
// 읽기
const token = localStorage.getItem("token"); // "abc123"
// 삭제
localStorage.removeItem("token");
// 전체 초기화
localStorage.clear();

4 네이티브 ↔ JS 브릿지 연동

4-1 네이티브에서 값 쓰기

webView.evaluateJavascript(
    "localStorage.setItem('login','true'); undefined;"
) { /* callback: null (undefined) */ }

4-2 네이티브에서 값 읽기

webView.evaluateJavascript(
    "localStorage.getItem('login');"
) { json -> 
    // json은 JSON 문자열 형태("true" 또는 null)
    val value = json?.trim('"')
}

5. 퍼시스턴스(저장 지속성) 이해


6. 초기화 & 정리(로그아웃/프라이버시)

val ws = WebStorage.getInstance()

// 전체 WebStorage 삭제(모든 오리진)
ws.deleteAllData()

// 특정 오리진만
ws.deleteOrigin("https://m.example.com")

// 현재 저장소 용량/오리진 목록 조회 후 조건부 삭제
ws.getOrigins { origins ->
    origins.forEach { origin ->
        // origin.origin, origin.quota, origin.usage
    }
}

7. 실무 팁: 안정성·보안·운영

7-1. 오리진, 스킴 주의

7-2. 혼합콘텐츠/세이프 브라우징(권장)

WebSettingsCompat.setSafeBrowsingEnabled(webView.settings, true)
webView.settings.mixedContentMode = WebSettings.MIXED_CONTENT_NEVER_ALLOW

7-3. 민감정보 저장 금지



Related Posts