Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

KKGRAM

[Android] SSL Error Handler 구글 스토어 경고 대응하기 본문

개발

[Android] SSL Error Handler 구글 스토어 경고 대응하기

kkgram 2017. 1. 22. 22:12


[Android] SSL Error Handler 구글 스토어 경고 대응하기



구글스토어에 어플을 올려두고 신경을 끄고있다가 어느날 들어와보니 업데이트가 되어있지 않았다. (정말 관심 안가짐) 경고문을 보니 아무래도 웹뷰를 사용하기 위해서 인증서를 무조건 패스하게 한 부분이 문제였던 것 같다. 


SSL Error Handler

For more information on how to address WebView SSL Error Handler alerts, please see this Google Help Center article.


경고에는 이런식으로 적혀있었고, 다른 블로그들을 확인 해 보니 대응하는 방법이 존재해서 바로 적용하고 올렸더니 문제없이 업데이트 되었다. 그 전에 해 둔 소스에서는 사용자의 선택없이 '무조건' 인증서가 없어도 true로 리턴해서 입장이 가능하도록 했는데 이 부분을 사용자의 선택에 맡기면 된다.



기존소스.java

private class WebViewClientClass extends WebViewClient {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);

            showWaitingDialog();
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);

            cancelWaitingDialog();
        }

        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            super.onReceivedError(view, request, error);

            cancelWaitingDialog();
        }

        @Override
        public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
            handler.proceed(); // SSL 에러가 발생해도 계속 진행!
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }


수정한지 좀 뒤에 작성하는 거라서 아마 그 전 소스는 대충 이랬을 것이다. onReceivedSslError에서 바로 계속 진행하도록 두었는데, 이 부분을 dialog 등을 통하여 사용자의 선택으로 돌리면 넘어갈 수 있다.



소스변경 후.java


private class WebViewClientClass extends WebViewClient {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);

            showWaitingDialog();
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);

            cancelWaitingDialog();
        }

        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            super.onReceivedError(view, request, error);

            cancelWaitingDialog();
        }

        @Override
        public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {

            final MessageDialog msg = new MessageDialog(ManualActivity.this);
            msg.setOnShowListener(new DialogInterface.OnShowListener() {
                @Override
                public void onShow(DialogInterface dialogInterface) {
                    msg.setMode("YESNO");
                    msg.setText("다음 페이지로 이동하시겠습니까?");
                }
            });

            msg.setOnDismissListener(new DialogInterface.OnDismissListener() {
                @Override
                public void onDismiss(DialogInterface dialogInterface) {
                    if(msg.getResult()!=null && msg.getResult().equals("YES")){
                        handler.proceed();
                    }else{
                        handler.cancel();
                    }
                }
            });

            msg.show();
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }




소스에 있는 MessageDialog는 본인이 커스텀해서 사용하는 다이얼로그 이므로 각자 사용하는 메시지 다이얼로그를 통해 yes or no의 값대로 proceed또는 cancel로 돌려준 뒤 다시 플레이스토어에 업데이트하면 반려없이 반영된다. 



Comments