继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Android webview加载https链接错误或无响应

哈士奇WWW
关注TA
已关注
手记 548
粉丝 71
获赞 401

最近做无线WiFi的时候,在最后认证成功的时候会弹出一个广告页,于是用webview去加载了一下,结果没反应,打印url出来看了一下,发现是https格式的,在使用WebView加载https资源文件时,如果认证证书不被Android认可,那么会出现无法成功加载对应资源问题。那么,我们就要针对这一状况作出对应的处理。

最近做无线WiFi的时候,在最后认证成功的时候会弹出一个广告页,于是用webview去加载了一下,结果没反应,打印url出来看了一下,发现是https格式的,在使用WebView加载https资源文件时,如果认证证书不被Android认可,那么会出现无法成功加载对应资源问题。那么,我们就要针对这一状况作出对应的处理。
于是百度了一下,这里记录一下,给大家做个参考:
1、设置WebView接受所有网站的证书
  在认证证书不被Android所接受的情况下,我们可以通过设置重写WebViewClient的onReceivedSslError方法在其中设置接受所有网站的证书来解决,重写WebView的onReceivedSslError方法,添加handler.proceed方法,但App如果上架GooglePlay会被警告的。所以建议使用以下的第二个方法。
具体代码如下:

webView.setWebViewClient(new WebViewClient(){@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
handler.proceed();
}
});

注:在重写WebViewClient的onReceivedSslError方法时,注意一定要去除onReceivedSslError方法的super.onReceivedSslError(view, handler, error);,否则设置无效。

2、启用mixed content
  Android webView 从 Lollipop 开始默认不开MixedContentMode,因此,我们开启即可满足我们大多数需求。

webView.setWebViewClient(new WebViewClient(){@Overridepublic 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);
}
});

在Android5.0中,WebView方面做了些修改,如果你的系统target api为21以上:

  系统默认禁止了mixed content和第三方cookie。可以使用setMixedContentMode() 和 setAcceptThirdPartyCookies()以分别启用。
  系统现在可以智能选择HTML文档的portion来绘制。这种新特性可以减少内存footprint并改进性能。若要一次性渲染整个HTML文档,可以调用这个方法enableSlowWholeDocumentDraw(),如果你的app的target api低于21:系统允许mixed content和第三方cookie,并且总是一次性渲染整个HTML文档。 
在使用WebView的类中添加如下代码:

// android 5.0以上默认不支持Mixed Contentif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webView.getSettings().setMixedContentMode(
        WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
}

结果:
  我的问题并不是出现在这些地方,而是出现了在加载Url时,部分Url使用的事http而不是https,导致无法加载,功能实现不了。那么要求后台开发人员把http改成https。就这样,成功了。或者还可以使用一些第三方库来加载也行。

测试:
1、调用高德地图没法显示,前端工程师用了http......那么改为https
2、部分功能没实现,因为后台的没有加证书.....那么,全部改回http

原文链接:http://www.apkbus.com/blog-703583-77332.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP