Android√ WebViewClient 완벽 가이드 – 네비게이션/에러/SSL/리소스 제어 (Kotlin)

✨ 개요

WebViewClient페이지 탐색 흐름과 로딩 수명주기를 다루는 핵심 콜백 집합입니다.
링크 열기 경로(내부/외부), 에러 화면, SSL 처리, 리디렉션, 리소스 가로채기까지 모두 WebViewClient 영역이죠.
이 글에서는 실무에서 바로 쓰는 기본 세팅 + 콜백별 베스트 프랙티스를 정리합니다. —

1 언제 WebViewClient를 쓰나?

반면 프로그레스/파일 업로드/JS 다이얼로그/전체화면 영상/권한WebChromeClient에 맡기세요.


2 리다이렉션

모바일 웹은 내부 리디렉션이 많습니다. 기본값으로 동일 WebView에서 처리하면 UX가 안정적입니다.

override fun shouldOverrideUrlLoading(
    view: WebView,
    request: WebResourceRequest
): Boolean {
    // request.isRedirect 등 조건이 있어도 false로 두어 내부에서 진행
    return false
}

3 큰/헤더 주입(고급) – shouldInterceptRequest

성능/보안 이슈가 있으니 정말 필요한 요청만 가로채세요.

// 개념 예시 – OkHttp로 프록시 후 WebResourceResponse 반환
private fun proxyWithOkHttp(req: WebResourceRequest): WebResourceResponse? {
    val client = OkHttpClient()
    val newReq = Request.Builder()
        .url(req.url.toString())
        .apply {
            // 필요 시 헤더 주입
            header("Authorization", "Bearer ${token()}")
            req.requestHeaders.forEach { (k, v) -> header(k, v) }
        }.build()

    val resp = client.newCall(newReq).execute()
    val mime = resp.header("Content-Type")?.substringBefore(";") ?: "text/plain"
    val stream = resp.body?.byteStream() ?: return null
    return WebResourceResponse(mime, "utf-8", resp.code, resp.message, emptyMap(), stream)
}

4 보안 베스트 프랙티스


5. 결론



Related Posts