public void onCreate(Bundle savedInstance)
{
super.onCreate(savedInstance);
setContentView(R.layout.show_voucher);
webView=(WebView)findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setBuiltInZoomControls(true);
String url ="https://www.paymeon.com/Vouchers/?v=%C80%8D%B1x%D9%CFqh%FA%84%C35%0A%1F%CE&iv=%25%EE%BEi%F4%DAT%E1"
//webView.loadUrl(url); // Not Working... Showing blank
webView.loadUrl("http://www.yahoo.com"); // its working
}
WebBView에서 URL을로드하려고하면 빈 화면 만 표시됩니다. Google.com 또는 yahoo.com을로드하면 정상적으로 작동합니다.
답변
WebViewClient 구현에이 재정의 메서드를 추가합니다. Android SDK 2.2 (API 레벨 8) 이상으로 컴파일해야합니다. 이 메서드는 2.2 (API 레벨 8)부터 공개 SDK에 나타나지만 2.1, 1.6 및 1.5를 실행하는 장치에서 테스트했으며 해당 장치에서도 작동합니다 (따라서 동작은 모두 계속되었습니다).
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // Ignore SSL certificate errors
}
이것은 당신을 도울 것입니다.
답변
다음은 도움이 될만한 작은 코드 샘플입니다.
먼저 WebViewClient를 확장하고 SSL 오류를 무시하도록 설정된 클래스를 만듭니다.
// SSL Error Tolerant Web View Client
private class SSLTolerentWebViewClient extends WebViewClient {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // Ignore SSL certificate errors
}
}
그런 다음 웹보기 개체 (OnCreate () 메서드에서 시작됨)를 사용하여 웹보기 클라이언트를 재정의 클래스의 인스턴스로 설정합니다.
mWebView.setWebViewClient(
new SSLTolerentWebViewClient()
);
답변
SSL 인증서 유효성 검사를 제대로 처리하고 새로운 보안 정책에 따라 Google의 애플리케이션 거부를 방지하려면 서버에서 제공 한 인증서가 예상을 충족 할 때마다 SslErrorHandler.proceed ()를 호출하도록 코드를 변경하고 그렇지 않으면 SslErrorHandler.cancel ()을 호출합니다.
예를 들어 사용자가 확인하고 Google이 더 이상 경고를 표시하지 않는 것처럼 보이도록 경고 대화 상자를 추가합니다.
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
String message = "SSL Certificate error.";
switch (error.getPrimaryError()) {
case SslError.SSL_UNTRUSTED:
message = "The certificate authority is not trusted.";
break;
case SslError.SSL_EXPIRED:
message = "The certificate has expired.";
break;
case SslError.SSL_IDMISMATCH:
message = "The certificate Hostname mismatch.";
break;
case SslError.SSL_NOTYETVALID:
message = "The certificate is not yet valid.";
break;
}
message += " Do you want to continue anyway?";
builder.setTitle("SSL Certificate Error");
builder.setMessage(message);
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();
}
이 변경 후에는 경고가 표시되지 않습니다.
답변
아래 코드를 제거하면 작동합니다.
super.onReceivedSslError(view, handler, error);
답변
onReceivedSslError를 재정의하고 제거합니다.
super.onReceivedSslError (보기, 핸들러, 오류)
그리고 Google 보안을 해결하려면 :
setDomStorageEnabled (true);
전체 코드는 다음과 같습니다.
webView.enableJavaScript();
webView.getSettings().setDomStorageEnabled(true); // Add this
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// DO NOT CALL SUPER METHOD
super.onReceivedSslError(view, handler, error);
}
});
답변
코드 줄을 복사하여 붙여 넣으십시오. 저를 믿으십시오. 🙂 생각하고 있습니다. ssl 오류가 발생합니다. onReceivedSslError 메서드를 재정의하고 super를 제거하면 super 메서드입니다. handler.proceed () 작성하면 오류가 해결됩니다.
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
activity.setTitle("Loading...");
activity.setProgress(progress * 100);
if (progress == 100)
activity.setTitle(getResources().getString(R.string.app_name));
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Log.d("Failure Url :" , failingUrl);
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
Log.d("Ssl Error:",handler.toString() + "error:" + error);
handler.proceed();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setDomStorageEnabled(true);
webView.loadUrl(Constant.VIRTUALPOS_URL + "token=" + Preference.getInstance(getContext()).getToken() + "&dealer=" + Preference.getInstance(getContext()).getDealerCode());
답변
SSL URL을 처리하려면 방법 WebViewClient 클래스의 onReceivedSslError () . 다음은 예제입니다.
webview.setWebViewClient(new WebViewClient() {
...
...
...
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
String message = "SSL Certificate error.";
switch (error.getPrimaryError()) {
case SslError.SSL_UNTRUSTED:
message = "The certificate authority is not trusted.";
break;
case SslError.SSL_EXPIRED:
message = "The certificate has expired.";
break;
case SslError.SSL_IDMISMATCH:
message = "The certificate Hostname mismatch.";
break;
case SslError.SSL_NOTYETVALID:
message = "The certificate is not yet valid.";
break;
}
message += "\"SSL Certificate Error\" Do you want to continue anyway?.. YES";
handler.proceed();
}
});
내 전체 예제는 https://github.com/Jorgesys/Android-WebView-Logging 에서 확인할 수 있습니다.