본문 바로가기

android

4. (android) WebViewClient 공식문서 공부

Constants

  • ERROR_AUTHENTICATION
    • 사용자 authentication가 서버에서 실패했다.
    • 사용자 authentication
      • 사용자의 신원을 확인하고 검증하는 프로세스
      • 비밀번호
      • 지문, 얼굴 인식 
  • ERROR_BAD_URL
    • Malformed URL
      • URL이 형식에 맞지 않은 경우 발생하는 오류 메세지
  • ERROR_CONNECT
    • 서버에서 접근을 실패하였다.
  • ERROR_FAILED_SSL_HANDSHAKE
    • 일반적으로 클라이언트와 서버 간에 안전한 SSL/TLS 연결을 설정하는데 문제가 있는 경우에 발생
      • SSL(보안소켓레이어)및 그 후속인 TLS(전송계층보안)은 인터넷을 통한 통신을 보호하기 위한 암호화 프로토콜입니다.
      • 웹사이트의 URL이 https://로 시작하는 경우 해당 웹사이트는 SSL/TLS를 사용하여 보안 연결을 제공하고 있음
  • ERROR_HOST_LOOKUP
    • 서버나 프록시의 호스트 이름을 찾는데 실패
    • 프록시
      • 컴퓨터 네트워크에서 중계 역할을 하는 서버나 소프트웨어
        • 데이터 중계 : 데이터를 수집하고 다른 시스템 또는 위치로 전송하는 프로세스 또는 장치
      • 기능
        • 보안 
          • 실제 IP주소를 숨길 수 있다.
          • 익명성 유지, 보안 강화
        • 캐싱
          • 프록시는 이전에 요청한 데이터를 저장하고, 동일한 요청이 다시 발생할 때 저장된 데이터를 반환함으로써 대역폭을 절약하고 웹페이지 로딩 속도를 높일 수 있다.
        • 필터링 
          • 웹 사잍 또는 콘텐츠에 대한 엑세스를 제어하기 위해 프록스를 사용할 수 있다.
          • 악성 콘텐츠에 대한 접근을 차단하거나 모니터링할 수 있다.
        • 로드 밸런싱
          • 여러 서버 사이에서 트래픽을 분산하는 로드 밸런서 역할을 하는 프록시도 있다.
        • 접근 제어
          • 프록시를 사용하여 특정 지리적 위치에서만 특정 서비스에 엑세스할 수 있도록 제한할 수 있습니다.
        • 콘텐츠 필터링 
          • 악성 콘텐츠, 광고 블로킹 또는 웹 페이지 변형을 통한 콘텐츠 수정과 같은 작업을 수행하는 프록시도 있다.
  • ERRO_IO
    • 서버에서 읽거나 쓰는데 실패함
  • ERROR_REDIRECT_LOOP
    • 너무 많은 리다이렉트
  • ERROR_UNSAFE_RESOURCE
    • Safe Browsing에 의해서 리소스 로드가 취소됨
  • SAFE_BROWSING_THREAT_BILLING
    • 사용자를 속여 청구 계약을 체결할 수 있으므로 리소스가 차단되었습니다.
    • 이 상수는 targetSdkVersion이 최소한 Build.VERSION_CODE.Q인 경우에만 사용됩니다. 그렇지 않으면 SAFE_BROWSING_THREAT_UNKNOWN이 대신 사용됩니다.
  • SAFE_BROWSING_THREAT_MALWARE
    • 리소스가 멀웨어를 포함하여 리소스가 차단되었다.
      • 멀웨어 : 악성 소프트 웨어

 

 

Public Method

public void doUpdateVisitedHistory (WebView view, 
                String url, 
                boolean isReload)
  • 방문한 링크 데이터 베이스를 업데이트하도록 호스트 어플리케이션에 알립니다.
  • 매개 변수
    • view
      • 콜백을 시작하는 WebView
    • url
      • 방문 중인 URL입니다.
    • isReload
      • true : URL이 다시 로드 되는 경우

 

public void onFormResubmission (WebView view, 
                Message dontResend, 
                Message resend)
  • 호스트 애플리케이션에게 웹 페이지에서 발생한 POST 요청에 대한 결과 페이지를 받은 경우, 사용자가 결과 페이지를 새로고침하거나 다른 페이지로 이동할 때 브라우저가 데이터를 다시 보낼지 여부를 결정하도록하는 메서드입니다.
  • 기본동작은 데이터를 다시 보내지 않도록 설정되어있다.
  • 새로 고침할 때 브라우저가 일반적으로 사용자에게 데이터를 다시 보낼 것인지를 화긴하는 확인 대화 상자를 표시합니다.
  • 매개 변수
    • dontResend
      • 브라우저가 재전송하지 않아야 하는 경우 보낼 메세지 입니다.
    • resend
      • 브라우저가 데이터를 다시 보내야하는 경우  보낼 메시지 입니다.

 

public void onLoadResource (WebView view, 
                String url)

 

  • WebView가 주어진 URL에 지정된 리소스르 로드할 것입을 호스트 어플리케이션에 알린다.
  • 매개 변수
    • url
      • WebView가 로드할 리소스의 URL

 

public void onPageFinished (WebView view, 
                String url)
  • 호스트 애플리케이션에게 페이지 로딩이 완료되었음을 알리는 메서드입니다.
  • 이 메서드는 main frame에 대해서만 호출된다.
  • 이 메서드의 콜백을 받는다고 해서 webview에서 다음 프레임이 현재 DOM 상태를 반영한 것을 보장하지 않는다.
    • DOM
      • 웹페이지의 구조를 표현하는 계층적인 객체 모델
      • 웹 페이지의 모든 요소와 그들의 속성 및 관계를 표현한다.
      • 클라이언트 측 웹 기술(HTML,XML,JavaScript 등)을 사용하여 이를 조작할 수 있도록 합니다.
      • DOM 상태란 DOM의 현재 상태 또는 구조를 가리킨다.
  • 현재 DOM 상태가 렌더링될 준비가 되었음을 WebView의 postVisualStateCallback 메서드를 사용하여 시각적 상태 콜백을 요청하고 제공된 콜백이 트리거 될때 까지 대기해야한다.
  • 페이지에 동적으로 로드되는 자원이나 스크립트에 의해 DOM이 변경될 수 있으며, 이러한 변경이 다음 프레임에 반영될 때 까지 시간이 걸릴 수있다.
  • 따라서 현재 DOM 상태가 렌더링 가능한 상태인지 확인하려면 postVisualStateCallback 메서드를 사용하여 제공된 콜백을 통해 시각적 상태가 준비되었을 때 알림을 받을 수 있다.
  • 이를 통해 렌더링 되기 전에 현재 페이지의 실제 상태를 확인하고 필요한 작업을 수행할 수 있다. 

 

public void onPageStarted (WebView view, 
                String url, 
                Bitmap favicon)
  • 페이지 로드가 시작되었음을 호스트 애플리케이션에 알린다.
  • 이 메소드는 각 메인 프레임 로드에 대해 한 번씩 호출되므로 iframe 또는 프레임셋이 있는 페이지는 메인 프레임에 대해 onPageStated를 한 번 호출합니다.
  • 이는 또한 포함된 프레임의 내용이 변경될 때 onPageStated가 호출되지 않는다는 것을 의미
  • 즉, 대상이 iframe인 링크를 클릭하면 프래그먼트 탐색(fragment id 탐색)에 대해서도 호출되지 않는다.
  • 매개 변수
    • view 
      • 콜백을 시작하는 WebView입니다.
    • url 
      • 로드할 URL
    • favicon
      • 이 페이지가 데이터 페이스에 이미 존재하는경우 즐겨찾기 아이콘

 

 

public void onReceivedError (WebView view, 
                int errorCode, 
                String description, 
                String failingUrl)
  • API level 1에 추가 23에 삭제됨
  • 호스트 어플리케이션에 오류를 보고한다.
  • 오류는 복구할 수 없다. 즉 기본 리소스를 사용할 수 없다.
  • 매개 변수
    • errorCode
      • ERROR_* 값에 해당하는 오류 코드
    • description 
      • 오류를 설명하는 문자열
    • failedUrl
      • 로드에 실패한 URL

 

public void onReceivedError (WebView view, 
                WebResourceRequest request, 
                WebResourceError error)
  • API level 23에 추가됨
  • 웹 리소스 로딩 오류를 호스트 애플리케이션에 보고 한다.
  • 이러한 오류는 일반적으로 서버에 연결할 수 없음을 나타낸다.
  • 더 이상 사용되지 않는 콜백 버전과 달리 새 버전은 기본 페이지뿐만 아니라 모든 리소스(iframe, 이미지 등)에 대해 호출된다.
  • 따라서 이 콜백에서는 최소한 필수 작업을 수행하는 것이 좋다.
  • 매개 변수
    • request
      • 원래 요청
    • error 
      • 오류에 대한 정보

 

public void onReceivedHttpAuthRequest (WebView view, 
                HttpAuthHandler handler, 
                String host, 
                String realm)
  • WebView가 HTTP authentication 요청을 수신했음을 호스트 애플리케이션에 알린다.
  • 호스트 애플리케이션은 제공된 HttpAuthHandler를 사용하여 요청에 대한 WebView의 응답을 설정할 수 있습니다.
  • 기본 동작은 요청을 취소하는 것입니다.
  • HttpAuthHandler는 UI스레드에서 사용해야합니다.
  • 매개 변수
    • host
      • 인증이 필요한 호스트
    • realm 
      • 인증이 필요한 영역

 

public void onReceivedLoginRequest (WebView view, 
                String realm, 
                String account, 
                String args)
  • 사용자 자동 로그인 요청이 처리 되었음을 호스트 어플리케이션에 알립니다.
  • 매개 변수
    • realm
      • 계정을 조회하는데 사용되는 계정영역
    • account
      • 선택적 계정입니다.
      • null이 아닌 경우 해당 계정을 장치의 계정과 비교하여 확인해야합니다.
      • 유효한 계정이라면 사용자 로그인에 사용해야 합니다.
    • args
      • 사용자 로그인에 사용되는 인증자별 인수입니다.

 

 

public void onReceivedSslError (WebView view, 
                SslErrorHandler handler, 
                SslError error)
  • 리소스를 로드하는 동안 SSL 오류가 발생했음을 호스트 애플리케이션에 알립니다.
  • 호스트 응용 프로그램은 SslErrorHandler#cancel() 또는 SslErrorHandler#proceed()를 호출해야 합니다.
  • 이 메서드의 재정의를 사용하여 사용자 정의 오류 페이지를 표시하거나 문제를 자동으로 기록할 수 있지만 호스트 애플리케이션은 항상 SslErrorHandler#cancel()을 호출하고 오류를 표시한 후에 웹 페이지로의 계속된 접근을 금지해야한다.
  • SSL 오류에 대해 사용자에게 메세지를 표시하지 마세요. 사용자는 결정을 내릴 수 없으며 WebView는 의미 있는 방식으로 오류 세부 정보를 표시하는 UI를 제공하지 않는다.
  • proceed() 또는 cancel() 호출 결정은 향후 SSL 오류에 대한 응압을 용이하게 하기위해 유지 될 수 있다.
  • 기본 동작은 리소스 로드 프로세스를 cancel라는 것입니다.
  • 이 API는 복구가능한 SSL 인증서 오류가 있는 경우에만 호출된다.
  • 복구할 수 없는 오류(서버가 클라이언트에 실패한 경우)의 경우 WebView는 ERROR_FAILEDSSL_HANDSHAKE 인수를 사용하여 onReceivedError(WebView, WebResourceRequest, WebResourceError)를 호출한다.

 

 

public void onScaleChanged (WebView view, 
                float oldScale, 
                float newScale)
  • WebView에 적용된 배율이 변경되었음을 호스트 애플리케이션에 알립니다.

 

public void onUnhandledKeyEvent (WebView view, 
                KeyEvent event)
  • WebView에서 처리되지 않은 특정 키 이벤트가 발생했을 때 호출되는 콜백 메서드이다.
  • 이 메서드를 사용하여 WebView 내에서 처리되지 않은 특정 키 이벤트를 감지하고 해당 이벤트를 처리할 수 있습니다.
  • 매개 변수
    • event
      • 처리되지 않은 키 이벤트를 나타내는 KeyEvent 객체

 

public WebResourceResponse shouldInterceptRequest (WebView view, 
                WebResourceRequest request)
  • WebView에서 웹 리소스 요청을 가로채고 수정하거나 대체한 다음 커스텀한 응답을 제공하는데 사용되는 콜백메서드입니다.
  • 작동 방식 및 주요 내용
    • 호스트 애플리케이션 알림
      • 이 메서드를 사용하여 WebView가 웹 리소스를 요청할 때 호스트 애플리케이션에 알린다.
      • 이것은 WebView에서 발생한 리소스 요청을 애플리케이션에서 처리하고자 할 때 사용된다.
    • 데이터 반환
      • 애플리케이션은 이 메서드를 통해 리소스 데이터를 반환 할 수 있다.
      • 반환 값으로 WebResourceResponse 객체를 사용하며, 이 객체는 응답정보와 데이터를 포함한다.
      • 애플리케이션이 데이터를 반환하는 경우 WebView는 해당데이터를 사용하여 리소스를 로드하게 된다.
    • null 반환
      • 애플리케이션이 null을 반환하는 경우, WebView는 리소스를 일반적인 방식대로 로드하게된다.
      • 즉, 아무런 수정없이 리소스를 웹에서 가져온다.
    • 다양한 URL Scheme
      • 이 메서드는 http(s):, data:, file: 등 다양한 URL 스키마에 대한 리소스 요청에 대해 호출됩니다.
      • 네트워크를 통해 요청을 보내는 스키마 뿐만 아니라 로컬 파일, 데이터 URL등 다양한 경우에 적용된다.
    • 특정 URL 제외
      • 이 메서드는 javascript: URL, blob: URL, file:///android_asset/ 또는 file:///android_res/에 대해서는 호출되지 않습니다.
    • 리다이렉트
      • 리다이렉트의 경우 이 메서드는 초기 리소스 URL에 대해서만 호출되며, 후속 리다이렉트 URL에 대해서는 호출되지 않습니다.
    • 쓰레드 주의
      • 이 메서드는 UI 쓰레드가 아닌 다른 쓰레드에서 호출됩니다.
      • 따라서 애플리케이션에서 개인 데이터나 뷰 시스템에 접근할 때 주의해야합니다.
    • Safe Browsing 체크
      • Safe Browsing이 활성화 된 경우 이 메서드에서 반환된 URL은 여전히 Safe Browsing 검사를 거칩니다.
      • 이를 피하려면 WebView#setSageBrowsingWhitelist를 사용하여 해당 호스트의 SageBrowsing 검사를 건너 뛸 수 있습니다.

 

public boolean shouldOverrideKeyEvent (WebView view, 
                KeyEvent event)
  • 호스트 애플리케이션 에게 key event를 동기식으로 처리할 수 있는 기회를 제공합니다.
  • 이 메서드를 사용하면 특정 키 이벤트를 WebView가 아니라 애플리케이션에서 처리할 수 있습니다.
  • 이를 통해 메뉴 단축키와 같은 이벤트를 필터링하고 처리할 수 있습니다.
  • true를 반환하면 호스트 애플리케이션이 키 이벤트를 직접 처리하고 WebView는 해당 키 이벤트를 처리하지 않습니다.
  • false를 반환하면 WebView가 키 이벤트를 처리하며, 이 경우 슈퍼 뷰 체인에서는 해당 이벤트를 볼수 없다.
  • 기본 동작은 false
  • 매개 변수
    • event 
      • 처리할 키 이벤트

 

 

public boolean shouldOverrideUrlLoading (WebView view, 
                WebResourceRequest request)
  • 이 메서드는 WebView에서 현재 WebView에 로드될 예정인 URL을 호스트 애플리케이션에 제어 권한을 부여하는 콜백 메서드
  • 이 메서드를 사용하여 URL이 로드되기 전에 애플리케이션에서 제어할 수 있습니다.
  • WebViewClient가 제공되지 않은 경우, 기본적으로 WebView는 URL에 대한 적절한 핸들러를 선택하기 위해 Activity Manager에 요청합니다.
  • WebViewClient가 제공된 경우 true를 반환하면 현재 WebView URL로딩을 중단하며 false를 반환하면 WebView는 URL 로딩을 계속 진행합니다.
  • WebView#loadUrl(String)을 사용하여 요청의 URL을 로드하고 true를 반환하지 마십시오.
  • 현재 로드를 무효화하고 동일한 URL로 새로운 로드를 시작하므로 불필요한 작업입니다.
  • 특정 URL을 계속 반환하려면 간단히 false를 반환하면 됩니다.
  • 이 메서드는 POST 요청에 대해서는 호출되지 않습니다.
  • 이 메서드는 HTTP(s) 스키마가 아닌 서브프레임 및 다른 스키마에 대해서도 호출될 수 있습니다.
  • 그러나 이 메서드에서 WebView#loadUrl(String)을 호출하는 경우 해당 URL이 올바르게 처리되지 않을 수 있습니다.
  • 이 메서드를 사용하면 웹페이지 내에서 특정링크를 클릭하거나 URL을 로드할 때 호스트 애플리케이션이 제어할 수 있으므로 웹 페이지의 네비게이션 동작을 커스터마이즈하고 보안을 강화할 수 있습니다.