Android webview 에 https 링크 를 불 러 오 는 중 오류 가 발생 했 거나 응답 이 없 는 해결
그래서 바 이 두 는 여기 기록 해서 여러분 께 참고 하 겠 습 니 다.
1.WebView 를 설정 하여 모든 사이트 의 인증 서 를 받 습 니 다.
인증 인증서 가 안 드 로 이 드 에 의 해 받 아들 여지 지 않 는 경우 웹 뷰 클 라 이언 트 를 다시 쓰 는 onReceivedSslError 방법 을 설정 하여 모든 웹 사 이 트 를 받 는 인증 서 를 설정 하여 해결 할 수 있 습 니 다.웹 뷰 를 다시 쓰 는 onReceivedSslError 방법 은 handler.proceed 방법 을 추가 할 수 있 습 니 다.단,앱 이 올 라 가면 Google Play 가 경 고 됩 니 다.그래서 다음 과 같은 두 번 째 방법 을 사용 하 는 것 을 권장 합 니 다.
구체 적 인 코드 는 다음 과 같다.
webView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
handler.proceed();
}
});
주:웹 뷰 클 라 이언 트 의 onReceivedSslError 방법 을 다시 쓸 때 onReceivedSslError 방법의 슈퍼.onReceivedSslError(view,handler,error)를 제거 해 야 합 니 다.그렇지 않 으 면 설정 이 잘못 되 었 습 니 다.2、mixed content 사용
Android webView 는 Lollipop 부터 Mixed ContentMode 를 기본적으로 열지 않 기 때문에 대부분의 수 요 를 만족 시 킬 수 있 습 니 다.
webView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings()
.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
});
Android 5.0 에서 WebView 측 에서 수정 을 했 습 니 다.시스템 target api 가 21 이상 이면:시스템 은 기본적으로 mixed content 와 제3자 쿠키 를 금지 합 니 다.setMixed ContentMode()와 setAcceptThird Party Cookies()를 사용 하여 각각 사용 할 수 있 습 니 다.
시스템 은 현재 HTML 문서 의 part 를 스마트 하 게 선택 하여 그 릴 수 있 습 니 다.이러한 새로운 기능 은 메모리 footprint 를 줄 이 고 성능 을 개선 할 수 있다.HTML 문 서 를 한꺼번에 렌 더 링 하려 면 이 방법 을 사용 하면 enableSlow WholeDocumentDraw()를 사용 할 수 있 습 니 다.만약 에 app 의 target api 가 21 보다 낮 으 면 시스템 은 mixed content 와 제3자 쿠키 를 허용 하고 모든 HTML 문 서 를 한꺼번에 렌 더 링 할 수 있 습 니 다.
WebView 를 사용 하 는 클래스 에 다음 코드 를 추가 합 니 다.
// android 5.0 Mixed Content
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings().setMixedContentMode(
WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
}
결과:제 문 제 는 이런 곳 에 나타 난 것 이 아니 라 Url 을 불 러 올 때 일부 Url 에서 사용 하 는 일 http 가 https 가 아니 라 불 러 올 수 없고 기능 이 실현 되 지 않 습 니 다.그러면 백 스테이지 개발 자 에 게 http 를 https 로 바 꿔 달라 고 요구 합 니 다.이렇게 성공 했다.아니면 제3자 라 이브 러 리 를 사용 해서 불 러 와 도 됩 니 다.
테스트:
1.고 덕 지 도 를 호출 하여 표시 할 수 없습니다.전단 엔지니어 가 http 를 사 용 했 습 니 다.그러면 https 로 변경 합 니 다.
2.일부 기능 이 구현 되 지 않 았 습 니 다.배경 에 인증서 가 없 기 때 문 입 니 다.
추가 지식:Android WebView 웹 링크 를 불 러 오 는 구덩이
원래 매우 간단 하 다 고 생각 했 던 문제 가 결국 많은 구 덩이 를 만 났 는데,지금까지 문제 가 발생 하지 않 을 것 이 라 고 장담 할 수 없 으 며,단지 대부분의 문 제 를 해결 하 였 을 뿐이다.
다음은 몇 가지 문 제 를 열거 하 는 것 이다.
웹 뷰 에서 다른 페이지 로 건 너 뛰 기 응답 없 음
웹 뷰 에서 파일 다운로드 에 응답 하지 않 음
일부 사이트 링크 를 표시 할 수 없습니다.
일부 웹 사 이 트 는 자동 으로 브 라 우 저 로 이동 합 니 다.
1.webview 에서 다른 페이지 로 넘 어가 면 응답 하지 않 음
수정 하기 전 코드 는 다음 과 같 습 니 다.
WebSettings webSettings = webView.getSettings();
// WebView , Javascript
webSettings.setJavaScriptEnabled(true);
//
webSettings.setAllowFileAccess(true);
//
webSettings.setBuiltInZoomControls(true);
webView.loadUrl(link);
webView.setWebViewClient(new webViewClient ());
수정 후 많은 webview 설정 을 추가 하 였 습 니 다.
webSettings.setAppCacheEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.supportMultipleWindows();
webSettings.setAllowContentAccess(true);
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setSavePassword(true);
webSettings.setSaveFormData(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setLoadsImagesAutomatically(true);
webView.setWebChromeClient(new WebChromeClient());//
물론 이런 속성 들 은 반드시 추가 해 야 하 는 것 이 아 닐 수도 있 습 니 다.다양한 수 요 를 만족 시 키 기 위해 저 는 모두 추 가 했 습 니 다.수정 이 완료 되면 웹 뷰 에서 다른 url 링크 를 뛰 어 넘 을 수 있 습 니 다.첫 번 째 문 제 를 해결 한 셈 입 니 다.
2.웹 뷰 에서 파일 다운로드 에 응답 하지 않 음
자체 웹 뷰 는 다운로드 기능 이 없 기 때문에 시스템 처리 나 사용자 정의 다운로드 가 필요 합 니 다.
웹 뷰 는 우리 에 게 다운로드 감청 인 터 페 이 스 를 제공 합 니 다.다음은 다운로드 처 리 를 실현 합 니 다.
class MyDownLoad implements DownloadListener {
@Override
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype, long contentLength) {
if (url.endsWith(".apk")) {
/**
* apk
*/
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
}
}
}
그리고 설정 에 추가:webView.setDownloadListener(new MyDownLoad());
다운로드 기능 을 시스템 에 맡 겨 처리 한 것 으로 특별한 수요 가 없어 사용자 정의 가 되 지 않 습 니 다.
3.일부 인터넷 주소 링크 를 표시 할 수 없습니다.unknown_url_scheme
웹 뷰 클 라 이언 트 를 사용자 정의 할 때 가 있 기 때문에 내용 은 다음 과 같 습 니 다.
private class webViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadurl(url)// true webview , false
return super.shouldOverrideUrlLoading(view,url); }
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if(!dialog.isShowing()) {
dialog.show();
}
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
if(dialog.isShowing()){
dialog.dismiss();
}
super.onPageFinished(view, url);
}
}
shouldOverrideUrl Loading 방법 에 주의 하 십시오.평소에 view.loadurl(url)을 설정 할 수 있 습 니 다.바로 이 코드 로 인해 일부 웹 페이지 가 열 리 지 않 습 니 다.이것 은 webview 자체 로 웹 페이지 를 불 러 오 는 데 제한 이 있 는 것 같 습 니 다.그래서 저 는 이 말 을 지 웠 습 니 다.돌아 올 때 트 루 로 돌 아 왔 습 니 다.이렇게 하면 일부 홈 페이지 가 여전히 열 리 지 않 는 것 을 발견 할 수 있다.그래서 웹 뷰 를 직접 삭 제 했 습 니 다.setWebView Client(new webView Client())를 삭 제 했 습 니 다.웹 뷰.setWebChromeClient(new WebChromeClient)는 삭제 할 수 없 었 습 니 다.결국 웹 페이지 는 열 렸 지만 어떤 것 은 자동 으로 브 라 우 저 로 넘 어가 열 렸 습 니 다.하지만 우리 의 요 구 는 브 라 우 저 를 열지 말 라 는 것 입 니 다...4.일부 웹 사이트 에서 자동 으로 브 라 우 저 로 이동
위 에서 말 한 것 을 받 고 일부 웹 주 소 를 열 고 브 라 우 저 로 넘 어 갔 습 니 다.어떻게 하면 그 를 뛰 지 못 하 게 할 수 있 습 니까?true 로 돌아 가면 점프 를 금지 할 수 있 습 니 다.그러나 일부 웹 주 소 는 webview 에서 열 수 없습니다.그 다음 에 true 나 false 로 직접 돌아 가지 않 고 슈퍼 로 돌아 가 부모 클래스 로 처리 하 게 했 습 니 다.결 과 는 브 라 우 저 로 바 뀌 지 않 았 고 웹 페이지 도 열 렸 습 니 다.지금 은 잠시 이렇게 끝 났 습 니 다.
결론:저 는 웹 뷰 에 대한 이해 에 도 한계 가 있 기 때문에 깊이 파고 들 지 않 고 일부 문제 만 해결 할 뿐 이해 에 도 편차 가 있 을 수 있 습 니 다.문제 가 있 으 면 양해 해 주 십시오.여러분 께 참고 가 되 셨 으 면 좋 겠 고 많은 응원 부 탁 드 리 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.