/ ANDROID, FILE ACCESS, WEBVIEW

Android 11대응 WebView편

TargetSdkVersion 30을 적용후 Webview에서 발생한 문제와 해결방법. 그리고 결론은 WebViewAssetLoader을 사용하세요.

setAllowFileAccess

WebSettings#setAllowFileAccess(boolean)

웹뷰에서 디바이스 로컬(앱영역) 리소스에 접근하는 기능을 제공하기 위해서는 위의 링크 페이지에서 나온것 처럼 webSettings.setAllowFileAccess(true) api를 이용해서 해결가능합니다. 하지만 페이지에 따라 보안에 대한 평가후 적용이 필요합니다.

앱은 WebView에서 외부 소스의 URL(file://)을 열지 말아야합니다. 앱이 외부 소스의 임의 URL을 허용하는 경우 이를 활성화하지 마십시오. URL 대신 스키마를 통해 자산 및 리소스를 포함한 파일에 액세스 하려면 androidx.webkit.WebViewAssetLoader 를 사용하는 것이 좋습니다.

setMixedContentMode

WebSettings#setMixedContentMode(int)

일부(Android 10 미만의) 디바이스에서는 https페이지에서 setAllowFileAccess(true)를 통해 file://로 시작하는 컨텐츠에 접근할 경우 안전하지 않은 자원을 로드하는 Mixed content로 판단하여, 해당 컨텐츠에 대한 접근을 거부합니다. MIXED_CONTENT_COMPATIBILITY_MODE만으로는 해결이 불가능합니다. 때문에 setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW)를 설정하여 접근을 허용해 주어야합니다. 기껏 Https를 적용하고 방어막을 깨트리는 행동이기 때문에 신중을 기해야합니다.

결론: WebViewAssetLoader을 적용하세요.

WebViewAssetLoader

예외를 제거하고, 동적으로 발생 가능한 문제를 방어 할 수 있습니다. 예제가 잘 구성되어있어 적용이 간편합니다. 👍

Search

Get more post