도리안의 Android 개발 #5 - 웹뷰의 AJAX 실행을 오버라이드 하는 방법

avatar
(Edited)



대문 제작: @imrahelk

웹 뷰와 앱은 동일한 서비스이므로 전자에서 로그인하면 후자에서도 로그인을 해 달라는 고객사의 요구가 있었습니다.


요청 사항

  • 웹 뷰에서 로그인할 때, 앱 로그인도 같이 처리해 달라.

문제

웹 페이지 이동으로 로그인을 한다면, WebViewClient 객체의 shouldOverrideUrlLoading 메소드를 오버라이드하면 됩니다. 그러나 웹 뷰에서 AJAX를 사용하여 로그인을 하는 경우에는 이 메소드가 통하지 않습니다.


해결 방법

위 요구 사항은 WebViewClient 객체의 shouldOverrideUrlLoading 메소드 대신 shouldInterceptRequest 메소드를 오버라이드 하여 해결할 수 있습니다. 이는 웹뷰가 특정 URL을 실행할 때, 앱에서 추가적인 실행을 할 수 있음을 의미합니다.

(1) shouldInterceptRequest 메소드를 오버라이드 하는 WebViewClient 객체를 정의하세요.

WebViewClient exWebViewClient = new WebViewClient() {
    @Override
    public boolean shouldInterceptRequest(WebView view, String url) {
        return super.shouldInterceptRequest(view, url);
    }
};

(2) 오버라이드 할 URL을 체크하는 if 문을 추가하고, 처리할 작업을 프로그래밍 하세요. 그리고 리턴 값은 다음과 같이 정하세요.

  • true: 웹뷰가 이 URL을 처리하지 않으면, true를 리턴
  • false: 웹뷰가 이 URL을 처리해야 하면, false를 리턴
@Override
public boolean shouldInterceptRequest(WebView view, String url) {

    // 예: "login"이 들어가는 URL이면, 앱 로그인도 처리
    if (url.contains("login") {
        // 로그인 처리 코드 작성
        return false;    // 웹 뷰에서도 로그인을 처리해야 하므로 false
    }

    return super.shouldOverrideUrlLoading(view, url);
}

(3) 위에서 정의한 WebViewClient 객체를 웹뷰의 WebViewClient로 설정하세요.

WebView wvExample = findViewById(R.id.wvExample);
wvExample.setWebViewClient(exWebViewClient);

참고 포스트

zzanbanner.jpg
스팀짱오픈카톡방 바로가기

aaronhong_banner.jpg



0
0
0.000
0 comments