Android 9 请求网络报异常:Cleartext HTTP traffic not permitted

因为从Android9.0(API 28)开始,NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted(), 将return false。这表示Android默认将禁止明文访问网络,只允许使用https url访问

为了避免强制启用https,可以有以下几种做法(任选其一即可):

  1. AndroidManifest文件的application节点添加android:usesCleartextTraffic="true"

     <?xml version="1.0" encoding="utf-8"?>
     <manifest ...>
         <uses-permission android:name="android.permission.INTERNET" />
         <application
             ...
             android:usesCleartextTraffic="true"
             ...>
             ...
         </application>
     </manifest>
    
  2. AndroidManifest文件的application节点添加android:networkSecurityConfig="@xml/network_security_config"

     <?xml version="1.0" encoding="utf-8"?>
     <manifest ...>
         <uses-permission android:name="android.permission.INTERNET" />
         <application
             ...
             android:networkSecurityConfig="@xml/network_security_config"
             ...>
             ...
         </application>
     </manifest> 
    

    还需要新建res/xml/network_security_config.xml 文件:

     <?xml version="1.0" encoding="utf-8"?>
     <network-security-config>
         <domain-config cleartextTrafficPermitted="true">
             <domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
         </domain-config>
     </network-security-config>
    
  3. 在AndroidManifest文件的manifest节点添加android:targetSandboxVersion="1":

     <?xml version="1.0" encoding="utf-8"?>
     <manifest android:targetSandboxVersion="1">
         <uses-permission android:name="android.permission.INTERNET" />
         ...
     </manifest>
    

以上三种做法均可以让我们的应用继续使用明文访问网络,不过既然Android强制要求启用https,还是尽快迁移到https为妙。

推荐阅读更多精彩内容