Android P(版本27以上) 网络请求http限制

前言:最近开了新项目,所以用了最新的android studio 也把gradle和android sdk用了新的版本来开发。但是用网络请求okhttp3请求数据的时候会有失败,查看相关文档找到了原因和解决方案,所以才引出了今天的这篇文章。

网络请求失败的错误日志先给出来:

java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by network security policy

该篇文章就是因为这个失败日志才诞生的,所以就此开始,请慢慢往下看。。。 

该错误日志出现的原因?

查找相关文档 发现由于 Android P(版本27以上) 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。所以如果当前应用的请求是 htttp 请求,而非 https ,这样就会导系统禁止当前应用进行该请求。

请看下面的官方说法:

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

所以得出了一个令人不爽的结论:

以后都要用https了,在Android P系统的设备上,如果应用使用的是非加密的明文流量的http网络请求,则会导致该应用无法进行网络请求,https则不会受影响。同样地,如果应用嵌套了webview,webview也只能使用https请求。

当然了,有问题就有解决渠道,该case解决方案:

one:项目改用https请求;
two:项目的targetSdkVersion改为27以下;
three:在res的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"
...
    />

该case的解决方案目前我就是了解这三种了,如果有补充,可以追加评论,互相学习嘛。

当前写到的只是该case的原因和解决方案,下面给出该安全特性的文档链接,感兴趣的可以去整体全面的看看:

https://developer.android.google.cn/training/articles/security-config

好了,此篇文章到此结束,希望可以帮到somebody    see   you

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值