問題: 由于 Android P 限制了明文流量的網(wǎng)絡(luò)請求,非加密的流量請求都會被系統(tǒng)禁止掉睛驳。
如果當(dāng)前應(yīng)用的請求是 htttp 請求弟塞,而非 https ,這樣就會導(dǎo)系統(tǒng)禁止當(dāng)前應(yīng)用進(jìn)行該請求,如果 WebView 的 url 用 http 協(xié)議笋鄙,同樣會出現(xiàn)加載失敗唯咬,https 不受影響嗤朴。
為此,OkHttp3 做了檢查垢夹,所以如果使用了明文流量匙瘪,默認(rèn)情況下索昂,在 Android P 版本 OkHttp3 就拋出異常: CLEARTEXT communication to " + host + " not permitted by network security policy
if (!Platform.get().isCleartextTrafficPermitted(host)) {
throw new RouteException(new UnknownServiceException(
"CLEARTEXT communication to " + host + " not permitted by network security policy"));
}
解決辦法
1.在application中添加:
android:usesCleartextTraffic="true"
- 在 res 下新建一個 xml 目錄纳鼎,然后創(chuàng)建一個名為:network_security_config.xml 文件 俺夕,該文件內(nèi)容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
然后在 AndroidManifest.xml application 標(biāo)簽內(nèi)應(yīng)用上面的xml配置:
android:networkSecurityConfig="@xml/network_security_config"
- 服務(wù)器和本地應(yīng)用都改用 https (推薦)
- targetSdkVersion 降級回到 27