問(wèn)題描述:
使用OkHttp3做網(wǎng)絡(luò)請(qǐng)求框架時(shí)翼虫,如果是http請(qǐng)求而非https請(qǐng)求屑柔,會(huì)導(dǎo)致請(qǐng)求失敗,因?yàn)锳ndroid P之后系統(tǒng)限制了明文的網(wǎng)絡(luò)請(qǐng)求珍剑,非加密請(qǐng)求會(huì)被系統(tǒng)禁止掉掸宛。
同樣如果您使用了WebView加載http協(xié)議下的頁(yè)面,也會(huì)出現(xiàn)加載失敗招拙,https則不受影響唧瘾。
分析:
OkHttp3的源碼可以看到措译,它做了請(qǐng)求的檢查
if (!Platform.get().isCleartextTrafficPermitted(host)) {
throw new RouteException(new UnknownServiceException(
"CLEARTEXT communication to " + host + " not permitted by network security policy"));
}
如果請(qǐng)求是明文流量,默認(rèn)情況下饰序,在Android P版本Okhttp3就會(huì)拋出異常:
CLEARTEXT communication to " + host + " not permitted by network security policy
解決辦法:
1.禁用掉明文流量請(qǐng)求的檢查
在 res 下新建一個(gè) xml 目錄领虹,然后創(chuàng)建一個(gè)名為: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配置:
<application
android:name=".App"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/AppTheme"></application>
2.推薦方式
服務(wù)器和本地應(yīng)用都改用 https
3.修改應(yīng)用目標(biāo)版本
將targetSdkVersion 降級(jí)回到 27