Android上的Web视图支持SSL吗?

Android上的WebView控件,它支持SSL吗?

我试图加载一个使用可信SSL证书的Web页面,但WebView只是白色的。

有什么build议么?

Solutions Collecting From Web of "Android上的Web视图支持SSL吗?"

不是专家,只是我可以在网上find。 据我所知,WebView确实支持ssl,但是,空白屏幕表明WebView不相信证书是有效的。 这可能会发生在自签名的证书或从未在android中设置的根authentication(完全有效的证书不validation)。 无论如何,如果你使用froyo或更好,你可以尝试像这样:

 import android.webkit.WebView; import android.webkit.WebViewClient; import android.webkit.SslErrorHandler; import android.net.http.SslError; ... engine = (WebView) findViewById(R.id.my_webview); engine.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } }); 

要根据更新的安全策略正确处理SSL证书validationoogle play,只要服务器提供的证书满足您的期望,就将其更改为调用SslErrorHandler.proceed(),否则请调用SslErrorHandler.cancel()。

例如,我添加了一个警告对话框,使用户已经确认,似乎谷歌不再显示警告。

  @Override public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext()); 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(); } 

在这个改变之后它不会显示警告。

您必须启用webview设置才能查看基于SSL的网站:

 webView.getSetting().setDomStorageEnable(true);