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

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

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


于是百度了一下,这里记录一下,给大家做个参考:


1、设置WebView接受所有网站的证书


 在认证证书不被Android所接受的情况下,我们可以通过设置重写WebViewClient的onReceivedSslError方法在其中设置接受所有网站的证书来解决,重写WebView的onReceivedSslError方法,添加handler.proceed方法,但App如果上架GooglePlay会被警告的。所以建议使用以下的第二个方法。


具体代码如下:

webView.setWebViewClient(new WebViewClient(){
@Override
public 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(){
@Override
public 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 Content
if (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



相关文章
|
6天前
|
安全 搜索推荐 Android开发
Android安全性: 解释HTTPS在移动应用中的重要性。
Android安全性: 解释HTTPS在移动应用中的重要性。
25 0
|
5天前
|
安全 Android开发
Android之OKHttp基本使用和OKHttp发送https请求安全认证
Android之OKHttp基本使用和OKHttp发送https请求安全认证
18 0
|
6天前
|
编解码 调度 Android开发
Android音频框架之一 详解audioPolicy流程及HAL驱动加载与配置
Android音频框架之一 详解audioPolicy流程及HAL驱动加载与配置
22 0
|
6天前
|
Android开发
Android中Glide加载Https图片失败的解决方案
Android中Glide加载Https图片失败的解决方案
19 1
|
6天前
|
存储 应用服务中间件 网络安全
Android 网络链接稳定性测试解决方案
Android 网络链接稳定性测试解决方案
24 0
|
6天前
|
Android开发
Android Mediatek NVRAM 加载 MAC 地址并禁用 MAC 地址更新
Android Mediatek NVRAM 加载 MAC 地址并禁用 MAC 地址更新
8 0
|
6天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
16 0
|
6天前
|
人工智能 测试技术 Android开发
Android实现点击链接跳转功能
Android实现点击链接跳转功能
31 1
|
6天前
|
Web App开发 前端开发 网络安全
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
【2月更文挑战第21天】前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
61 1
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
|
6天前
|
API Android开发
[Android]图片加载库Glide
[Android]图片加载库Glide
60 0