안드로이드

[Android] 웹뷰(webview) ShouldOverrideUrlLoading을 이용하여 응용 프로그램이 제어할 수 있는 기회를 처리 방법(url scheme)

IT꿈나무 2021. 9. 29. 13:23
반응형

업무의 배경: 

 웹뷰를 구현할때 단순히, WebView를 이용하여 웹화면을 호출하는 것이 아니라 특정 url를 받을 경우 호스트 응용 프로그램이 제어 할수 있는 기회를 받아야 한다.

 

업무의 내용:

WebView에 URL이로드 되려고 할 때 호스트 응용 프로그램이 제어할 수 있는 기회를 제공한다. shouldOverrideUrlLoading 영역에서 내부적으로 url에 맞는 행동을(내부 화면 호출 후 종료) 하는 경우, 내부처리를 진행하고 true를 반환하여 URL 로드를 중단거나, false을 반환하여 WebView가 평소와 같이 URL로드를 진행하도록 처리한다.[3]

 

ShouldOverrideUrlLoading 코드. 

@Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        MyLog.i(TAG,"shouldOverrideUrlLoading(view:"+view+ ", request:"+request+"), request: request.getUrl().toString()"+request.getUrl().toString());
        //return super.shouldOverrideUrlLoading(view, request);
        return true; //true는 호스트가 제어를 하고 처리했다를 반환, false을 반환하여 WebView가 평소와 같이 URL로드를 진행하도록 처리
    }

 

예제

a태그로 웹에서 스키마를 호출하면, 호스트 응용 프로그램에서 url이 로드 될때 체크하여, 스키마에 맞는 행동을 취한다.[2]

<a href="example-app:showProfile">Show Profile</a>
    // The URL scheme should be non-hierarchical (no trailing slashes)
    private static final String APP_SCHEME = "example-app:";

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.startsWith(APP_SCHEME)) {
            urlData = URLDecoder.decode(url.substring(APP_SCHEME.length()), "UTF-8");
            respondToData(urlData);
            return true;
        }
        return false;
    }

참고자료:

[1]가이드>웹 기반 콘텐츠, https://developer.android.com/guide/webapps?hl=ko
[2]가이드>웹 기반 콘텐츠>Android 4.4에서 WebView로 이전> 맞춤 URL 처리, https://developer.android.com/guide/webapps/migrating?hl=ko
[3]참고>WebViewClient>shouldOverrideUrlLoading, 
https://developer.android.com/reference/android/webkit/WebViewClient?hl=ko#shouldOverrideUrlLoading(android.webkit.WebView,%20android.webkit.WebResourceRequest)

반응형