9.0要求使用安全的網(wǎng)絡(luò)訪問,如果項(xiàng)目使用的是http請(qǐng)求方式而非https,請(qǐng)求會(huì)失敗市俊。
解決方案:
一坦胶、APP改用https請(qǐng)求
這種方式需要接口去協(xié)調(diào)透典,把請(qǐng)求域名改為https。
二顿苇、targetSdkVersion 降到27以下
三峭咒、在 res 下新增一個(gè) xml 目錄,然后創(chuàng)建一個(gè)名為:network_security_config.xml 文件(名字自定) 纪岁,內(nèi)容如下凑队,大概意思就是允許開啟http請(qǐng)求。
<?xml version="1.0" encoding="utf-8"?>
<!--Android 9.0 https請(qǐng)求適配-->
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
然后在APP的AndroidManifest.xml文件下的application標(biāo)簽增加以下屬性:
android:networkSecurityConfig="@xml/network_security_config"
新增問題:上一個(gè) xml 的配置只是解決了自己應(yīng)用使用 okhhtp3 的問題♂:玻現(xiàn)在發(fā)現(xiàn) OSS 上傳圖片也無法成功漩氨,一樣是因?yàn)椴话踩木W(wǎng)絡(luò)訪問導(dǎo)致的西壮,把 xml 文件的寫法改成這樣:
<?xml version="1.0" encoding="utf-8"?>
<!--Android 9.0 https請(qǐng)求適配-->
<network-security-config>
<!--<base-config cleartextTrafficPermitted="true" />-->
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">你的服務(wù)端接口地址</domain>
<domain includeSubdomains="true">你的 OSS 路徑</domain>
</domain-config>
</network-security-config>
需要注意的是:你的服務(wù)端接口地址不要加 http:// 前綴,如果是 ip 地址叫惊,還不能加端口號(hào)款青。
再次新增問題:
發(fā)現(xiàn)訊飛和高德地圖在9.0的設(shè)備上也會(huì)失效。高德地圖日志打印網(wǎng)絡(luò)異常赋访,因此判斷也是網(wǎng)絡(luò)安全的原因可都。故而凡是項(xiàng)目中用到需要請(qǐng)求網(wǎng)絡(luò)的第三方 SDK ,都需要做出對(duì)應(yīng)的適配。所以為了避免麻煩蚓耽,還是暫時(shí)先把 targetSdkVersion 降到 27 吧渠牲。
最新適配方案:
由于有應(yīng)用需要上傳 Google Play 商店,必須要適配到 Api28 以上步悠。所以 targetSdkVersion 27 的方式不能再使用了∏╄荆現(xiàn)在把之前的 network_security_config.xml 文件的內(nèi)容修改如下即可:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>