Android高版本http网络请求失败的Cordova配置处理


作者:IT晴天
链接:https://www.jianshu.com/p/12ab6718e81c
来源:简书

问题出现的原因是因为Android高版本(Android 6.0)以上默认使用TLS保护用户信息,详见以下文档:
Transport Layer Security

摘录关键信息如下:

Android致力于保证其用户、设备和数据的安全。我们保证数据安全的一种方式是通过保护所有进入或离开使用TLS技术的Android设备数据。正如我们在Android P开发人员预览版中所宣布的那样,我们通过默认阻止Android P应用使用未加密连接通信来进一步提升安全性。

这是我们多年来为保护Android用户所做的各种更改。为了防止意外的未加密连接,我们在Android Marshmallow(安卓6.0)中引入了android:usesCleartextTraffic 这样一个manifest属性。在Android Nougat(安卓7.0)中,我们通过创建网络安全配置(Network Security Config)功能扩展了该属性,该功能允许应用程序警告开发者在没有加密的情况下发送网络流量。在Android Nougat(安卓7.0)和Oreo(安卓8.0)中,我们仍然允许明文连接。

 

简单地说,在Android高版本对非加密的明文传输有要求,也即默认启用了TLS保护,使得该应用无法进行http网络请求,而https则不会受影响,同样地,如果应用嵌套了webview也会受这限制。

针对这种情况,有以下4种解决方案:

  1. 使用https。条件允许的话,建议使用,以增强安全性。
  2. Android编译的targetSdkVersion改为27以下。因为是高版本才出现的,那可以降维处理;
  3. 在AnroidManifest.xml中的application添加设置项:
    <application android:usesCleartextTraffic="true">
  4. 添加网络安全配置。在res的xml目录下,新建一个network_security_config.xml文件(名称随便取):
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

  

然后在AnroidManifest.xml中的application添加指向该文件的设置项:
android:networkSecurityConfig="@xml/network_security_config"

其中,第1、2种方案都是有条件要求的,而第4种是第3种的扩展使用,可做更详细的项配置。对于我们一般使用来说,其实也不需要用到特别的安全策略。

 

 

目前用方案:

综合考量,第3种方案个人认为会好点,Cordova配合其使用也很简单:

在config.xml文件中,在 <platform name="android"/>节点内添加配置项即可

  <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application">
            <activity android:usesCleartextTraffic="true" />
  </edit-config>

这样Cordova build的时候就会把上面配置合并到AnroidManifest.xml中。

如果不行,在AndIot\platforms\android\app\src\main\AndroidManifest.xml 文件中,增加:android:usesCleartextTraffic="true", 如下图:

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM