为什么带有明文的HTTP流量错误ERR_CLEARTEXT_NOT_PERMITTED持续存在?

时间:2019-06-03 21:21:54

标签: android cordova ionic-framework

我正在使用Ioonic-framework开发一个新的应用程序,并且正在使用HttpClient模块来处理API请求。

问题是我已阅读并尝试将解决方案应用于:

  1. https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
  2. https://forum.ionicframework.com/t/livereload-err-cleartext-not-permitted/163487
  3. Android 8: Cleartext HTTP traffic not permitted
  4. Why am I seeing net::ERR_CLEARTEXT_NOT_PERMITTED errors after upgrading to Cordova Android 8?
  5. How to fix 'net::ERR_CLEARTEXT_NOT_PERMITTED' in flutter
  6. Android Pie: WebView showing error for plain HTTP on some sites, even with usesClearTextTraffic="true"
  7. WebView showing ERR_CLEARTEXT_NOT_PERMITTED although site is HTTPS

但是我的应用程序在查询API时仍然抛出此错误。

这是我文件的详细信息:

位于 / ,位于 config.xml

    <?xml version='1.0' encoding='utf-8'?>
<widget id="com.example" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    ...
    <platform name="android">
        <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
            <application android:networkSecurityConfig="@xml/network_security_config"/>
            <application android:usesCleartextTraffic="true" />
        </edit-config>
        <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
     ...
</widget>

位于 / resources / android / xml / network_security_config.xml

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

使用安全加密的协议HTTPS是无效的。该API仅允许使用HTTP。

2 个答案:

答案 0 :(得分:0)

  1. 确保在Ionic Project的config.xml中具有以下内容:

    <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
                <application android:networkSecurityConfig="@xml/network_security_config" />
                <application android:usesCleartextTraffic="true" />
            </edit-config>
    
  2. 运行离子Cordova构建android。它在Platforms下创建Android文件夹

  3. 打开Android Studio并打开项目中存在的Android文件夹 项目平台Android。静置几分钟,以便建立gradle

  4. gradle build完成后,我们在将minSdVersion包含在manifest.xml中时遇到了一些错误。 现在,我们要做的就是从<uses-sdk android:minSdkVersion="19" />中删除manifest.xml

    确保将其从两个位置都删除:

    1. app→清单→AndroidManifest.xml
    2. CordovaLib→清单→AndroidManifest.xml

    现在尝试再次构建gradle,现在可以成功构建

  5. 确保在App→清单→Androidmanifest.xml的Application标签中具有以下内容:

    <application
    android:networkSecurityConfig="@xml/network_security_config"  android:usesCleartextTraffic="true" >
    
  6. 打开network_security_config(应用程序→res→xml→network_security_config.xml)。

    添加以下代码:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">xxx.yyyy.com</domain>
        </domain-config>
    </network-security-config>
    

此处xxx.yyyy.com是HTTP API的链接。确保在URL之前不包含任何Http。

注意:现在使用Android Studio来构建应用程序(构建-Build Bundle's / APK-Build APK),现在您可以使用该应用程序了,它在Android Pie中可以正常工作。如果您尝试使用ionic Cordova build android来构建应用程序,它将覆盖所有这些设置,因此请确保使用Android Studio来构建Project。

如果您安装了任何较旧的应用程序版本,请卸载它们并尝试一下,否则将出现一些错误:

  

未安装应用

答案 1 :(得分:0)

  1. 确保在Ionic Project的config.xml中具有以下内容:

    <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android"> <application android:usesCleartextTraffic="true" android:networkSecurityConfig="@xml/network_security_config" /> </edit-config>

2。在/ resources / android / xml /中,network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
 <base-config cleartextTrafficPermitted="true"/> 
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
  <domain includeSubdomains="true">www.apiurl.com</domain>
    </domain-config>
</network-security-config>

请注意不要在域网址中添加http

在ionic 4 http api的调用上为我完美地工作