Después de actualizar a Cordova Android 8.0 , veo net::ERR_CLEARTEXT_NOT_PERMITTED
errores al intentar conectarme a los http://
objetivos.
¿Por qué es así y cómo puedo resolverlo?
Después de actualizar a Cordova Android 8.0 , veo net::ERR_CLEARTEXT_NOT_PERMITTED
errores al intentar conectarme a los http://
objetivos.
¿Por qué es así y cómo puedo resolverlo?
Respuestas:
Se actualizó el nivel de API predeterminado en la plataforma de Android Cordova. En un dispositivo Android 9, la comunicación de texto claro ahora está deshabilitada de forma predeterminada .
Para permitir la comunicación de texto claro nuevamente, configure android:usesCleartextTraffic
en su application
etiqueta a true
:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Como se indica en los comentarios, si no ha definido android
previamente el espacio de nombres XML, recibirá un error: unbound prefix
durante la compilación. Esto indica que debe agregarlo a su widget
etiqueta de la misma manera config.xml
, así:
<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">
AndroidManifest.xml
en su proyecto de Android?
Hay dos cosas que corregir en config.xml Por lo tanto, la respuesta correcta debería ser agregar el 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">
además de editar la configuración para permitir:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Si se evita el paso 1, error: prefijo independiente. aparecerá
El texto sin cifrar aquí representa información no cifrada. Desde Android 9, se recomienda que las aplicaciones llamen a las API HTTPS para asegurarse de que no haya vísperas.
Sin embargo, si aún necesitamos llamar a las API HTTP, podemos hacer lo siguiente:
Plataforma: Ionic 4
Cree un archivo llamado: network_security_config.xml en project-root / resources / android / xml
Agrega las siguientes líneas:
<?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>
Ahora en project-root / config.xml , actualice las siguientes líneas:
<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...
Debería funcionar ahora.
config.xml
antes de la edit-config
etiqueta: <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
. ¡Gracias!
Para solucionar el problema hay otra opción. en los recursos de archivo / android / xml / network_security_config.xml. insertar:
<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>
En mi caso, estoy usando una dirección IP, entonces la configuración básica es necesaria, pero si tienes un dominio. solo agrega el dominio.
Hoy mismo me encontré con este problema y encontré un complemento realmente ingenioso que le ahorrará la molestia de intentar permitir manualmente el tráfico de texto sin cifrar en Android 9+ para su aplicación Apache Cordova. Simplemente instale cordova-plugin-cleartext, y el complemento debería encargarse de todas las cosas detrás de escena de Android por usted.
$ cordova plugin add cordova-plugin-cleartext
$ cordova prepare
$ cordova run android
Después de unos días de lucha, esto funciona para mí y espero que esto también funcione para ti.
agregue esto a su CONFIG.XML , en la parte superior de su código.
<access origin="*" />
<allow-navigation href="*" />
y esto, bajo la plataforma 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" />
agregue el siguiente código a este archivo "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>
trust-anchors
etiquetas eran el componente final para que todo el resto funcionara.
Agregar el siguiente atributo dentro de la etiqueta de apertura <widget> funcionó para mí. Recargas simples y en vivo correctamente en un emulador de 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">
edit-config
código de la respuesta aceptada (corrige el unbound prefix
error)
deberías agregar
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
a
recursos / android / xml / network_security_config.xml
Me gusta esto
<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>
La siguiente es la solución que funcionó para mí. Los archivos que actualicé son los siguientes:
Los cambios en los archivos correspondientes son los siguientes:
1. config.xml
He agregado una <application android:usesCleartextTraffic="true" />
etiqueta dentro de la <edit-config>
etiqueta en el archivo 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>
...
<platform name="android">
2. network_security_config.xml
En este archivo, he agregado 2 <domain>
etiquetas dentro de la <domain-config>
etiqueta, el dominio principal y un subdominio según el requisito de mi proyecto
<?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>
Gracias @Ashutosh por brindar la ayuda.
Espero eso ayude.
Estoy usando IONIC 5.4.13, cordova 9.0.0 (cordova-lib@9.0.1)
Puede que esté repitiendo información, pero para mí el problema comenzó a aparecer después de agregar algún complemento (aún no estoy seguro). Probé todas las combinaciones anteriores, pero nada funcionó. Solo comenzó a funcionar después de agregar:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
archivar en proyecto en
recursos / android / xml / network_security_config.xml
entonces mi archivo network_security_config.xml ahora se ve así:
<?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>
Gracias a todos.
Old ionic cli (4.2) estaba causando problemas en mi caso, actualice a 5 para resolver el problema
Estamos utilizando el cordova-custom-config
complemento para administrar nuestra configuración de Android. En este caso la solución fue agregar un nuevo custom-preference
a nuestro config.xml
:
<platform name="android">
<preference name="orientation" value="portrait" />
<!-- ... other settings ... -->
<!-- Allow http connections (by default Android only allows https) -->
<!-- See: /programming/54752716/ -->
<custom-preference
name="android-manifest/application/@android:usesCleartextTraffic"
value="true" />
</platform>
¿Alguien sabe cómo hacer esto solo para compilaciones de desarrollo? Estaría feliz de que las versiones de lanzamiento salieran de esta configuraciónfalse
.
(Veo las ofertas de configuración de iOS buildType="debug"
para eso, pero no estoy seguro de si esto se aplica a la configuración de Android).
@Der Hochstapler gracias por la solución.
pero en IONIC 4 alguna personalización en el proyecto config.xml funciona para mí
Agregar una línea en la etiqueta del widget
<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">
después de esto, en la etiqueta de la Plataforma de customize androide algunas líneas de verificación a continuación
añadir usesCleartextTraffic = true después networkSecurityConfig y recursos en archivos etiquetas
<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" />
<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
En un proyecto de condensador Ionic 4, cuando empaqueté e implementé en un teléfono Android para realizar pruebas, recibí este error. Se resuelve reinstalando el condensador y actualizando la plataforma Android.
npm run build --prod --release
npx cap copy
npm install --save @capacitor/core @capacitor/cli
npx cap init
npx cap update android
npx cap open android
Si tiene un marco Legacy Cordova que tiene problemas con el comando NPM y Cordova. Sugeriría la siguiente opción.
Crear archivo android / res / 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">Your URL(ex: 127.0.0.1)</domain>
</domain-config>
</network-security-config>
AndroidManifest.xml -
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...>
...
</application>
</manifest>
La siguiente solución funcionó para mí
Ir a Cambiarlo resources/android/xml/network_security_config.xml
a
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">api.example.com(to be adjusted)</domain>
</domain-config>
</network-security-config>
Simplemente agregue esta línea al archivo platform / android / app / src / main / AndroidManifest.xml
<aplicación android: hardwareAccelerated = "true" android: icon = "@ mipmap / ic_launcher" android: label = "@ string / app_name" android: supportsRtl = "true" android: usesCleartextTraffic = "true" >
error: unbound prefix.
) al intentar compilar mi aplicación Cordova. La solución fue agregar en miconfig.xml
archivo, en mi<widget>
elemento raíz el atributoxmlns:android="http://schemas.android.com/apk/res/android