Android9.0手機調用接口全部失敗

  最近做項目時發現一個問題,用Retrofit請求網絡報這個錯
CLEARTEXT communication to host not permitted by network,剛開始有點懵逼,因爲開發的app其他系統都是正常的,只有9.0的不行,後來百度才發現,由於 Android P 限制了明文流量的網絡請求,非加密的流量請求都會被系統禁止掉。如果當前應用的請求是 htttp 請求,而非 https ,這樣就會導系統禁止當前應用進行該請求,如果 WebView 的 url 用 http 協議,同樣會出現加載失敗,https 不受影響。具體的返回信息如下:

CLEARTEXT communication not supported: [ConnectionSpec(cipherSuites=
[TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 
LS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, 
TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, 
TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA], 
tlsVersions=[TLS_1_2, TLS_1_1, TLS_1_0], supportsTlsExtensions=true), ConnectionSpec(cipherSuites=
[TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, 
TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, 
TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA], 
tlsVersions=[TLS_1_0], supportsTlsExtensions=true)]

解決方法有三種:
(1)第一種方法:targetSdkVersion 降回到 27
(2)第二種方法:在 res 下新建一個 xml 目錄,然後創建一個名爲:network_security_config.xml 文件 ,該文件內容如下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
   <base-config cleartextTrafficPermitted="true" />
</network-security-config>

然後在 AndroidManifest.xml application 標籤內應用上面的xml配置:

        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>

(3)第三種方法:服務器和本地應用都改用 https (推薦)
好了,本次記錄就到這裏了。
轉載自:https://blog.csdn.net/u014727709/article/details/87214587
歡迎start,歡迎評論,歡迎指正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章