尝试在网络视图中加载 URL 时出错 - android

Error while trying to load a URL in webview - android

URL,由于 SSL 错误,我正在尝试在我的一项活动中加载 Web 视图时显示空白。

我已经尝试使用网络安全配置 XML 文件夹,但我不确定我是否理解我在做什么。任何帮助将不胜感激。

调试时,当我在 webview 中加载 Google.com 作为 URL 时,页面加载正常。然后,当我尝试搜索特定站点时,它就在那里,但是当我单击它时,我在 Android Studio 的 运行 日志中收到 SSL 错误。

public class About_ALC extends AppCompatActivity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_about__alc);
    final WebView webview = (WebView) findViewById(R.id.web_about_alc);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setLoadWithOverviewMode(true);
    webview.getSettings().setUseWideViewPort(true);
    webview.setWebViewClient(new WebViewClient());
    webview.setWebChromeClient(new WebChromeClient());
    webview.loadUrl("https://andela.com/alc/");
}

the error message I receive in Android studio's is:

"E/chromium: [ERROR:ssl_client_socket_impl.cc(947)] handshake failed; returned -1, SSL error code 1, net_error -202"

您需要扩展 WebViewClient 以允许加载,尽管存在 ssl 错误,如下所示。

    // A new webclient that ignore ssl errors
    private class IgnoreSSLErrorWebViewClient extends WebViewClient {
        // You can all the class anything

    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed(); // When an error occurs, ignore and go on
    }
}

站点存在 ssl 证书验证问题。当出现 ssl 验证错误时,默认的 WebViewClient 停止加载。此扩展将指示它忽略错误并继续。

所以换行webview.setWebViewClient(new WebViewClient());

webview.setWebViewClient(new IgnoreSSLErrortWebViewClient());

这对你来说现在应该可以正常工作了。

如果您使用此代码,Play 商店可能会拒绝您的构建

@Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed(); // When an error occurs, ignore and go on
    }

我分享我的方式,没有扩展

webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient(){
   @Override
   public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
      //super.onReceivedSslError(view, handler, error);
      handler.proceed();//skip ssl error
   }
});

webView.loadUrl(URL);

编辑:

Play Store 可能会将其视为漏洞错误,如果有人需要,一些解决方案是向用户显示错误对话框。这不是自动接受错误,责任是用户,就像那样

final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(msg);
builder.setPositiveButton("continue", (dialog, which) -> handler.proceed());
builder.setNegativeButton("cancel", (dialog, which) -> handler.cancel());
final AlertDialog dialog = builder.create();
dialog.show();