Android 中webView无法加载https协议URL,特别是6.0以后都出现问题
webView 从 Lollipop 开始默认不开
MixedContentMode
Android WebView 6.0 以后默认不允许使用混合模式打开 http 页面,比如:从 https 页面重定向到 http 页面
1
2
3
4
5
6
7
8
9
| 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);
}
}
);
|
tips: 由于加载的页面,本身 https 设置问题导致的,上面的方法也无法解决,需要抓包分析
重写 WebViewClient
的onReceivedSslError
添加handler.proceed
方法,但 App如果上架GooglePlay会被警告
1
2
3
4
5
6
7
| webView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
handler.proceed();
}
}
);
|
android 9 以上,http 无法在 webview 加载
因为 Android 9.0 以后,默认禁止了 http 请求
创建配置文件 res/xml/network_security_config.xml
1
2
3
4
| <?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
|
在 AndroidManifest.xml
中配置
1
2
3
4
| <application
android:networkSecurityConfig="@xml/network_security_config"
>
</application>
|
如果出现 Manifest merger failed with multiple errors, see logs
则配置为
1
2
3
4
5
| <application
android:networkSecurityConfig="@xml/network_security_config"
tools:replace="android:networkSecurityConfig"
>
</application>
|