升级到Cordova Android 8.0后,net::ERR_CLEARTEXT_NOT_PERMITTED尝试连接http://目标时出现错误。
为什么会这样,我该如何解决呢?
Der*_*ler 137
Cordova Android平台中的默认API级别已升级。在Android 9设备上,默认情况下现在禁用明文通信。
要再次允许明文交流,请将标签android:usesCleartextTraffic上的设置application为true:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Run Code Online (Sandbox Code Playgroud)
如注释中所述,如果您之前未定义androidXML名称空间,则将error: unbound prefix在构建过程中收到。这表明您需要将其添加到widget同一标签中config.xml,如下所示:
<widget id="you-app-id" version="1.2.3"
xmlns="http://www.w3.org/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cdv="http://cordova.apache.org/ns/1.0">
Run Code Online (Sandbox Code Playgroud)
top*_*sen 29
我今天自己遇到了这个问题,并找到了一个非常漂亮的插件,它可以为您省去在 Android 9+ 中为您的 Apache Cordova 应用程序手动允许明文流量的麻烦。只需安装cordova-plugin-cleartext,该插件就会为您处理所有幕后的Android 东西。
$ cordova plugin add cordova-plugin-cleartext
$ cordova prepare
$ cordova run android
Run Code Online (Sandbox Code Playgroud)
zar*_*ior 28
config.xml中有两件事需要更正,因此正确的答案应该是添加xmls:android:
<widget id="com.my.awesomeapp" version="1.0.0"
xmlns="http://www.w3.org/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cdv="http://cordova.apache.org/ns/1.0">
Run Code Online (Sandbox Code Playgroud)
加上编辑配置以允许:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Run Code Online (Sandbox Code Playgroud)
如果避免了步骤1,则错误:未绑定前缀。会出现
Sus*_*hil 18
经过几天的斗争,这对我有用,我希望这也对你有用。
将此添加到您的CONFIG.XML,代码的顶部。
<access origin="*" />
<allow-navigation href="*" />
Run Code Online (Sandbox Code Playgroud)
而这个,在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:usesCleartextTraffic="true" />
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
<resource-file src="resources/android/xml/network_security_config.xml"
target="app/src/main/res/xml/network_security_config.xml" />
Run Code Online (Sandbox Code Playgroud)
将以下代码添加到此文件"resources/android/xml/network_security_config.xml"。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">YOUR DOMAIN HERE/IP</domain>
</domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)
Ash*_*osh 16
明文此处表示未加密的信息。从Android 9开始,建议应用程序应调用HTTPS API,以确保安全可靠。
但是,如果仍然需要调用HTTP API,则可以执行以下操作:
平台:离子4
在project-root / resources / android / xml下创建一个名为network_security_config.xml的文件
添加以下行:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain>ip-or-domain-name</domain>
</domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)
现在在project-root / config.xml中,更新以下行:
<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:usesCleartextTraffic="true" />
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
... other statements...
Run Code Online (Sandbox Code Playgroud)
现在应该可以工作了。
小智 13
为了解决这个问题,还有其他选择。在文件资源/android/xml/network_security_config.xml中。插入:
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain>localhost</domain>
<domain includeSubdomains="true">192.168.7.213:8733</domain>
</domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)
我的情况是,我正在使用IP地址,则base-config是必需的,但是如果您有域。只需添加域。
Mar*_*kle 12
在开头的<widget>标记内添加以下属性对我来说很有效。简单,实时地在Android 9模拟器上正确重新加载。 xmlns:android =“ http://schemas.android.com/apk/res/android”
<widget id="com.my.awesomeapp" version="1.0.0"
xmlns="http://www.w3.org/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cdv="http://cordova.apache.org/ns/1.0">
Run Code Online (Sandbox Code Playgroud)
小智 10
我使用 IONIC 5.4.13,cordova 9.0.0 (cordova-lib@9.0.1)
我可能会重复信息,但对我来说,在添加一些插件后问题开始出现(还不确定)。我尝试了上述所有组合,但没有任何效果。它仅在添加后才开始工作:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
Run Code Online (Sandbox Code Playgroud)
在项目中归档
资源/android/xml/network_security_config.xml
所以我的 network_security_config.xml 文件现在看起来像:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">10.1.25.10</domain>
</domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)
谢谢大家。
以下是对我有用的解决方案。我更新的文件如下:
对应文件的变化如下:
1.配置文件
我在 config.xml 文件中的标签中添加了<application android:usesCleartextTraffic="true" />标签<edit-config>
<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:usesCleartextTraffic="true" />
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
...
<platform name="android">
Run Code Online (Sandbox Code Playgroud)
2.network_security_config.xml
在这个文件中,我根据我的项目要求<domain>在<domain-config>标签中添加了 2 个标签,主域和子域
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">mywebsite.in</domain>
<domain includeSubdomains="true">api.mywebsite.in</domain>
</domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)
感谢@Ashutosh 提供帮助。
希望能帮助到你。
您应该添加
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
Run Code Online (Sandbox Code Playgroud)
至
资源/android/xml/network_security_config.xml
像这样
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</domain-config> </network-security-config>
Run Code Online (Sandbox Code Playgroud)
只需将此行添加到platforms/android/app/src/main/AndroidManifest.xml 文件中
<application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" **android:usesCleartextTraffic="true"**>
Run Code Online (Sandbox Code Playgroud)
在阅读了整个讨论后,寻找一种方法来授权与所有 IP 地址的通信,在我的情况下,请求将发送到的 IP 地址由用户在输入文本中定义,不能在配置文件中定义。这是我解决问题的方法
这是配置
配置文件
<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" />
</edit-config>
<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
...
</platform>
Run Code Online (Sandbox Code Playgroud)
资源/android/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
Run Code Online (Sandbox Code Playgroud)
最重要的一段代码是<base-config cleartextTrafficPermitted="true" />in<network-security-config>而不是domain-config
| 归档时间: |
|
| 查看次数: |
47806 次 |
| 最近记录: |