由于SSL错误,我试图在我的一项活动中加载到Web视图中的URL显示为空。
我曾尝试使用网络安全配置XML文件夹,但不确定我是否了解我在做什么。任何帮助将不胜感激。
在调试时,当我将Google.com作为URL加载到Webview中时,页面加载正常。然后,当我尝试搜索特定站点时,它在那里,但是当我单击它时,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/");
}
我在Android Studio中收到的错误消息是:
“ E /铬:[ERROR:ssl_client_socket_impl.cc(947)]握手失败;返回-1,SSL错误代码1,net_error -202”
答案 0 :(得分:0)
您需要扩展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());
现在应该可以正常使用了。
答案 1 :(得分:0)
如果您使用此代码,则Play商店可能会拒绝您的版本
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // When an error occurs, ignore and go on
}
答案 2 :(得分:0)
我分享我的方式,没有扩展
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 商店可能会将其视为漏洞错误,如果有人需要,一些解决方案是,向用户显示错误对话框。这是不自动接受错误,责任是用户,就像那样
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();