본문 바로가기
Android 개발/android :: Tip

[안드로이드 웹뷰] WebView 하얀화면 아무것도 안 뜨는 현상 해결

by 독학하는 1인 개발자 2021. 1. 13.

Android 개발 Tip.

- WebView

 

하얀 화면, 아무 것도 안 뜨는 현상 해결

 

http:// 주소 접속시 연결이 안 되는 현상 해결

 

SSL 인증 무시하기

 

 

 

 

 

웹뷰를 개발하다보면

 

주소가 정확함에도 불구하고

 

화면 로드가 되지 않는 경우가 발생한다.

 

 

 

원인은 다양하다고 알고 있는데

 

그 중 한 가지 해결책으로는 SSL 인증을 무시하는 방법이 있다.

 

물론 이 방법은 여러 원인의 해결책 중 한 가지에 불과하기 때문에

 

일단 시도해보고 안 되면 또 다른 해결책을 찾아야 한다.

 

근데 그런거 무시하면 안 되는 거 아니에요?

 

나도 찾아보니까 괜찮다고 한다.

 

 

 

일단 SSL 인증서가 무엇일까?

 

SSL 인증서란?

 

디지털 인증서라고도 하는 SSL(보안 소켓 계층) 인증서는

 

브라우저 또는 사용자의 컴퓨터와 서버 또는 웹사이트 간에

 

암호화된 연결을 수립하는데 사용된다.

 

SSL 연결은 인증되지 않은 사용자의 방해로부터

 

각 방문(세션) 중에 교환된 중요한 데이터(예: 신용카드 정보)를 보호한다.

 

 

간단히 말하면, 

 

웹 서버와 브라우저 간 안전하게 암호화된 연결을 수립하기 위한 표준 보안 기술이다.

 

 

 

 

이걸 무시하는 코드는 다음과 같다.

 

1. SSL 인증서 무시하는 코드

1
2
3
4
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed(); // SSL 인증서 무시
}
cs

 

 

어디에 넣느냐?

 

WebView를 사용하면 필수는 아니지만 만약 추가 설정이 필요할때 웹뷰클라이언트를 설정할 때가 있다.

 

WebViewClient 클래스를 만들어서 넣고 설정해주면 된다.

 

코드가 짧으니까 MainActivity 빈 자리에 대충 아래 코드를 넣어주자.

 

 

 

2. WebClient 클래스에 입력

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//웹뷰 클라이언트
public static class MyWebClient extends WebViewClient {
 
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        handler.proceed(); // SSL 인증서 무시
    }
 
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        //return super.shouldOverrideUrlLoading(view, request);
        view.loadUrl(request.getUrl().toString()); 
        return true//응용프로그램이 직접 url 처리
    }
}
cs

 

shouldOverrideUrlLoading은 웹페이지를 자체적으로 처리하는 코드고

 

onReceivedSslError가 SSL 인증서를 무시하는 코드다.

 

 

마지막에로 웹뷰에서 웹뷰클라이언트를 세팅하면 된다.

 

3. 웹뷰에 세팅

1
2
webViewM = findViewById(R.id.webView);
webViewM.setWebViewClient(new MyWebClient());
cs

 

 

 

 

이상 웹뷰가 로드되지 않고 아무 것도 안 뜨는 현상에 대한 해결책을 정리해보았다.

 

 

나같은 경우는 이게 정확한 원인인지는 모르겠는데

 

https:// 주소는 접속이 되는데 http:// 주소는 접속이 안 되는 현상이었다.

 

그래서 해당 코드를 넣어주니 바로 해결이 되었다.

 

 

 

 

 

 

 

댓글