Android9.0 http网络请求失败问题的处理
目錄
- 處理方法(任意一種):
- APP改用https請求
- targetSdkVersion 降到27以下
- 配置network-security-config(推薦)
- 原因
- 出錯案例
處理方法(任意一種):
APP改用https請求
這種方式是最佳方法,需要前后端協調,后端得支持https,把請求改為https。
targetSdkVersion 降到27以下
這種方法是下策,除非臨時調試或緊急處理,不建議長期使用。
配置network-security-config(推薦)
在 res 下新增一個 xml 目錄,然后創建一個名為:network_security_policy.xml 文件(文件名隨意) ,添加下面的xml內容。
<?xml version="1.0" encoding="utf-8"?> <!--Android 9.0 http請求適配--> <network-security-config><base-config cleartextTrafficPermitted="true" /> </network-security-config>然后在AndroidManifest.xml文件的application標簽增加屬性:
android:networkSecurityConfig="@xml/network_security_policy"
如圖:
這種方法在解決第三方sdk是很合適的,同時也能彌補第一種方法中無法立刻更換為https的情況。
原因
Google表示,為保證用戶數據和設備的安全,針對下一代 Android 系統(Android P) 的應用程序,將要求默認使用加密連接,這意味著 Android P 將禁止 App 使用所有未加密的連接,因此運行 Android P 系統的安卓設備無論是接收或者發送流量,未來都不能明碼傳輸,需要使用下一代(Transport Layer Security)傳輸層安全協議,而 Android Nougat 和 Oreo 則不受影響。
出錯案例
1、用Retrofit (okhttp3及以上版本)進行http請求報錯
java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by network security policy
如果當前應用的請求是 htttp ,而非 https ,這樣系統就會阻止當前應用進行該請求,
為此,OkHttp3 做了檢查,所以如果使用了明文流量,默認情況下,在 Android P 版本 OkHttp3 就拋出異常:
"CLEARTEXT communication to " + host + " not permitted by network security policy
2、webview 和 HttpUrlConnection
java.io.IOException: Cleartext HTTP traffic to **** not permitted
如果 WebView 的 url 用 http 協議,同樣會出現加載失敗,無法顯示webview的內容,https 則不受影響。
總結
以上是生活随笔為你收集整理的Android9.0 http网络请求失败问题的处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c primer英文版第5版_2019足
- 下一篇: bs4 乱码_Python Beauti