앱내 Webview에서 HTTPS 처리 이슈

개발/안드로이드 2017. 8. 9. 08:57
반응형

HTTPS 페이지내 이미지가 안나오는 현상

앱에서 Webview를 사용하여 컨텐츠를 보여주는 주는데 HTTPS로된 페이지 내에서 이미지가 표시가 안되는 현상이 있었습니다.

logcat 에서는 "This request has been blocked; the content must be served over HTTPS"라고 남고 있었습니다.


그래서 해결방안을 구글링 해보니 아래와 같이 하라는 정보를 발견하였습니다.!!

WebSettings wsetting = m_webView.getSettings();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{// https 이미지.
wsetting.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}

적용해보니 이미지가 정상적으로 나옵니다.


안드로이드 5.0 변경 사항에 보면 이렇게 적혀 있습니다.


WebView

 

Android 5.0은 앱의 기본 동작을 변경합니다.


  • 앱이 API 레벨 21 이상을 대상으로 하는 경우:
    • 시스템은 기본적으로 혼합 콘텐츠타사 쿠키를 차단합니다. 혼합 콘텐츠와 타사 쿠키를 허용하려면 각각 setMixedContentMode() 및 setAcceptThirdPartyCookies() 메서드를 사용합니다.
    • 이제 시스템이 HTML 문서 중에서 그릴 수 있는 부분을 지능적으로 선택합니다. 이러한 새 기본 동작은 메모리 공간을 줄이고 성능을 향상시킵니다. 문서 전체를 즉시 렌더링하려는 경우 enableSlowWholeDocumentDraw()를 호출하여 이 최적화를 비활성화합니다.
  • 앱이 21 이하의 API 레벨을 대상으로 하는 경우: 시스템이 혼합 콘텐츠와 타사 쿠키를 허용하며 항상 전체 문서를 한 번에 렌더링합니다.



요약하면 혼합 콘텐츠와 타사 쿠키를 차단한다고 합니다.

이미지가 Block 되어 안나오는 현상은 혼합 콘텐츠와 연관이 있었던 겁니다.

HTTPS 페이지내에서 이미지 등 모든 것을 HTTPS 주소를 사용해야 하지만, 이미지 주소가 HTTP로 사용되어 Block된 것이였습니다.


혼합된 콘텐츠의 자세한 사항은 아래 주소에서 확인하세요.

https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content


onReceivedSslError 보안 알림 해제 방법 

다음은 안드로이드 앱 등록할때 보안알림에 관해 설명하도록 하겠습니다.

onReceivedSslError 보안 이슈로 많이 알려져 있습니다.


아래와 같이 추가 시 보안이슈를 해결 할 수 있습니다. 

m_webView.setWebViewClient(new WebViewClient() {

@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error)
{
//super.onReceivedSslError(view, handler, error);
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.sharedActivity().getContext());
builder.setMessage("이 사이트의 보안 인증서는 신뢰할 수 없습니다.");
builder.setPositiveButton("continue", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.proceed();
}
});
builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.cancel();
}
});
final AlertDialog dialog = builder.create();
dialog.show();

});

보안알림이 발생될 경우 앱이 등록이 되지않습니다. Webview를 사용하고 있는 곳에 전부 넣어야 보안 알림이 뜨지 않고 정상적으로 앱을 등록할 수 있습니다.

저도 이걸몰라 몇번이나 등록을 하면서 고생 한적이 있습니다.






반응형
admin