【问题标题】:Why is the error ERR_CLEARTEXT_NOT_PERMITTED with cleartext for the HTTP traffic persistent?为什么 HTTP 流量的明文错误 ERR_CLEARTEXT_NOT_PERMITTED 持续存在?
【发布时间】:2019-10-19 10:36:08
【问题描述】:

我正在使用 Ionic 框架开发一个新应用,并且我正在使用 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。

【问题讨论】:

  • 我也面临同样的问题。 Http api 不允许在 Android Pie 中用作默认值。所以它可以在除 Android Pie 之外的所有其他设备上运行。 M 尝试,如果我有解决方案将更新你。请让我知道你是否找到了一些可行的解决方案

标签: android cordova ionic-framework


【解决方案1】:

2019 年 12 月更新 ionic - 4.7.1

<manifest xmlns:tools=“http://schemas.android.com/tools”>

<application android:usesCleartextTraffic=“true” tools:targetApi=“28”>

请在 android manifest .xml 文件中添加以上内容

ionic 的旧版本

  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. 运行 ionic Cordova build android。它在 Platforms 下创建 Android 文件夹

  3. 打开 Android Studio 并打开我们项目中的 Android 文件夹 项目平台安卓。等待几分钟,以便构建 gradle

  4. gradle build 完成后,我们收到一些错误,因为在 manifest.xml 中包含 minSdVersion。 现在我们要做的就是从manifest.xml 中删除&lt;uses-sdk android:minSdkVersion="19" /&gt;

    确保将其从两个位置移除:

    1. 应用 → 清单 → AndroidManifest.xml
    2. CordovaLib → 清单 → AndroidManifest.xml

    现在尝试再次构建 gradle,现在它构建成功了

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

    <application
    android:networkSecurityConfig="@xml/network_security_config"  android:usesCleartextTraffic="true" >
    
  6. 打开network_security_config(app → 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 -- Build Bundle's/APK -- Build APK),现在您可以使用该应用程序,它在 Android Pie 中运行良好。如果您尝试使用 ionic Cordova build android 构建应用程序,它会覆盖所有这些设置,因此请确保您使用 Android Studio 构建项目。

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

应用未安装

【讨论】:

  • 我的工作是通过将 network_security_config 设置为 &lt;network-security-config&gt; &lt;base-config cleartextTrafficPermitted="true"/&gt; &lt;/network-security-config&gt; 这适用于 Ionic 5
  • @PabloGarcia 您在哪里进行了这些更改?在什么文件中?
【解决方案2】:
  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>

注意不要在域 url 中添加 http

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

【讨论】:

猜你喜欢
  • 2013-10-16
  • 2010-11-03
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
相关资源
最近更新 更多