适配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),内容如下:

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

在manifest清单文件配置application:

<application
...
 android:networkSecurityConfig="@xml/network_security_config"
...
    />

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

因为 Android 9.0 彻底废弃了org.apache.http.legacy.jar,
但ImSDK又依赖于这个库,所以需要在manifest的application节点中增加以下配置:
 <application>
    ...
    <!-- Android 9.0兼容配置 -->
    <!--适配android9.0 Apache HTTP 客户端弃用-->
    <uses-library android:name="org.apache.http.legacy" android:required="false"/>
    ...
 </application>
 

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值