适配Android9.0,使用http明文流量的解决方案。

需要适配的原因

在Android 9.0(P ,API 28)版本中,限制了http明文流量的网络请求,未加密的流量请求都会被系统禁掉。
所以如果当前应用的请求是 htttp 请求,而非 https,这样就会导系统禁止当前应用进行该请求。
报错信息:
CLEARTEXT communication to www.kuaidi100.com not permitted by network security policy

官方说法

Android 致力于保护用户们的设备和数据安全。
我们保证数据安全的方法之一是保护所有进入或离开Android 设备的数据在传输中使用传输层安全性(TLS)。
正如我们在Android P开发人员预览中所宣布的那样,
我们通过阻止针对Android P的应用程序默认允许未加密的连接来进一步改进这些保护。   
这是我们多年来为更好地保护Android 用户而做出的各种更改。
为了防止意外的未加密连接,我们android:usesCleartextTraffic在AndroidMarshmallow中引入了manifest 属性。
在Android Nougat中,我们通过创建Network Security Config功能扩展了该属性,
该功能允许应用程序指示他们不打算在没有加密的情况下发送网络流量。
在Android Nougat和Oreo 中,我们仍然允许明文连接。

解决方案:

  1. 项目中全部使用https请求
  2. 项目的targetSDKVersion改为27及以下
  3. 在项目中做一下配置(推荐):

在res目录下新建一个xml文件夹,在xml目录下,新建一个xml文件(名称自定义,如:network_security_config.xml),内容如下:



    

在manifest清单文件配置application:


以上为通用配置,此外,在使用腾讯IMSDK中出现使用第三种配置之后,腾讯IM无法访问网络成功的问题,返回错误码6012。这时的错误原因是:

因为 Android 9.0 彻底废弃了org.apache.http.legacy.jar,
但ImSDK又依赖于这个库,所以需要在manifest的application节点中增加以下配置:
 
    ...
    
    
    
    ...
 
 

附:腾讯云通信产品概述链接,官方网页中暂时没找到入口
https://cloud.tencent.com/document/product/269/1557

你可能感兴趣的:(Android)