Recibí informes de usuarios con Android 8 de que mi aplicación (que usa alimentación de fondo) no muestra contenido. Después de la investigación, encontré la siguiente excepción en Android 8:
08-29 12:03:11.246 11285-11285/ E/: [12:03:11.245, main]: Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.doConnection(AbstractHttpAsyncTask.java:207)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.extendedDoInBackground(AbstractHttpAsyncTask.java:102)
at com.deiw.android.generic.tasks.AbstractAsyncTask.doInBackground(AbstractAsyncTask.java:88)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
(He eliminado el nombre del paquete, la URL y otros identificadores posibles)
En Android 7 y versiones anteriores, todo funciona, no configuro android:usesCleartextTraffic
en Manifiesto (y configurarlo true
no ayuda, ese es el valor predeterminado de todos modos), ni uso la información de seguridad de red. Si llamo NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted()
, regresa false
para Android 8, true
para versiones anteriores, usando el mismo archivo apk. Traté de encontrar alguna mención de esto en la información de Google sobre Android O, pero sin éxito.
cleartextTrafficPermitted="true"
Respuestas:
Según la configuración de seguridad de la red :
También eche un vistazo a: https://koz.io/android-m-and-the-war-on-cleartext-traffic/
Explicación de Codelabs: https://codelabs.developers.google.com/codelabs/android-network-security-config/index.html
Opción 1 -
Primero intente presionar la URL con "https: //" en lugar de "http: //"
Opcion 2 -
Crear archivo res / xml / network_security_config.xml -
AndroidManifest.xml -
Opción 3 -
android: usesCleartextTraffic Doc
AndroidManifest.xml -
Además, como señaló la respuesta de @ david.s, también
android:targetSandboxVersion
puede ser un problema:De acuerdo con los documentos manifiestos :
Entonces la Opción 4 -
Si tiene
android:targetSandboxVersion
adentro,<manifest>
entonces reduzca a1
AndroidManifest.xml -
fuente
android:usesCleartextTraffic="true"
?En el AndroidManifest encontré este parámetro:
y @ xml / network_security_config se define en network_security_config.xml como:
solo cambié el texto claro TrafficPermitted a true
fuente
Mi problema en Android 9 era navegar en una vista web sobre dominios con http La solución de esta respuesta
y:
res / xml / network_security_config.xml
fuente
gradle
?Es posible que solo desee permitir texto sin cifrar durante la depuración, pero mantenga los beneficios de seguridad de rechazar el texto sin formato en la producción. Esto es útil para mí porque pruebo mi aplicación en un servidor de desarrollo que no admite https. Aquí se explica cómo aplicar https en producción, pero permitir texto sin formato en modo de depuración:
En build.gradle:
En la etiqueta de la aplicación en AndroidManifest.xml
fuente
Cambia tu url de
HTTP
aHTTPS
;¡¡¡Funciona!!!
fuente
En la sugerencia proporcionada anteriormente, estaba proporcionando mi URL como http://xyz.abc.com/mno/
Cambié eso a xyz.abc.com y luego comenzó a funcionar.
fuente
Ok, eso es ⇒⇒ NO ⇐⇐ la repetición de miles de agregarlo a su Manifiesto , pero una pista que se basa en esto, pero le da un beneficio adicional (y tal vez algo de información de fondo).
Android tiene un tipo de funcionalidad de sobrescritura para el directorio src.
Por defecto, tienes
Pero puede agregar directorios adicionales para sobrescribir su AndroidManifest.xml. Así es como funciona:
Dentro de este archivo, no tiene que poner todas las Reglas dentro, sino solo las que desea sobrescribir desde su / app / src / main / AndroidManifest.xml
Aquí un ejemplo de cómo se ve para el permiso CLEARTEXT solicitado:
Con este conocimiento, ahora es tan fácil como 1,2,3 sobrecargar sus permisos dependiendo de su depuración | principal | liberar el medio ambiente.
El gran beneficio es que ... no tiene elementos de depuración en su Manifiesto de producción y mantiene una estructura fácil y fácil de mantener
fuente
Podría ser útil para alguien.
Recientemente tuvimos el mismo problema para Android 9, pero solo necesitábamos mostrar algunas URL en WebView, nada muy especial. Por lo tanto, agregar
android:usesCleartextTraffic="true"
a Manifest funcionó, pero no queríamos comprometer la seguridad de toda la aplicación para esto. Entonces, la solución fue cambiar los enlaces dehttp
ahttps
fuente
Para proyectos React Native
Ya estaba arreglado en RN 0.59. Puede encontrar en la actualización diff de 0.58.6 a 0.59 . Puede aplicarlo sin actualizar su versión RN. Siga los pasos a continuación:
Crea archivos:
android / app / src / debug /res/xml/react_native_config.xml -
android / app / src / debug /AndroidManifest.xml -
Verifique la respuesta aceptada para conocer la causa raíz.
fuente
De acuerdo, he resuelto esto. Se debe al parámetro Manifiesto
android:targetSandboxVersion="2"
, que he agregado porque también tenemos la versión de la aplicación instantánea: debe asegurarse de que una vez que el usuario actualice de la aplicación instantánea a la aplicación normal, no perderá sus datos con la transferencia. Sin embargo, como sugiere la vaga descripción:Obviamente, también agrega un nuevo nivel de política de seguridad, al menos en Android 8.
fuente
He eliminado esta línea del archivo de manifiesto de Android que ya está allí
y agregado
esto en la etiqueta de aplicación en manifiesto
entonces este error El tráfico HTTP de texto en claro a overlay.openstreetmap.nl no permitido se fue para mí en Android 9 y 10. Espero que esto funcione para Android 8 también si se ayuda, no se olvide de votar gracias
fuente
Para aplicar estas diversas respuestas
Xamarin.Android
, puede usar los atributos de nivel de clase y ensamblado en lugar de editar manualmenteAndroidManifest.xml
Por supuesto, se necesita permiso de Internet (duh ..):
Nota: Por lo general, los atributos de nivel de ensamblado se agregan a su
AssemblyInfo.cs
archivo, pero cualquier archivo, debajousing
y arriba de lasnamespace
obras.Luego, en su subclase de Aplicación (cree una si es necesario), puede agregar
NetworkSecurityConfig
con una referencia a unResources/xml/ZZZZ.xml
archivo:Cree un archivo en la
Resources/xml
carpeta (cree laxml
carpeta si es necesario).xml/network_security_config
Archivo de ejemplo , ajustar según sea necesario (ver otras respuestas)También puede usar el
UsesCleartextTraffic
parámetro enApplicationAttribute
:fuente
UsesCleartextTraffic = true
También recibo el mismo error "No se permite el tráfico HTTP de texto en claro" al desarrollar mi aplicación. Estoy usando Retrofit2 para llamadas de red en mi aplicación y tengo dos entornos de proyecto (desarrollo y producción). Mi dominio de producción tiene un certificado SSL con llamadas HTTPS y el desarrollador no tendrá https. La configuración se agrega en los sabores de compilación. Pero cuando cambio a dev, este problema se disparará. Así que agregué la siguiente solución para eso.
He agregado tráfico de texto sin formato en el manifiesto
Luego, agregué una especificación de conexión en la clase de configuración de actualización OKHttp hora de creación.
La creación completa de OkHttpClient se da a continuación
fuente
Actualización de diciembre de 2019 iónico - 4.7.1
Agregue el contenido anterior en el archivo de manifiesto de Android .xml
Versiones anteriores de iónico
Asegúrese de tener lo siguiente en su
config.xml
proyecto Ionic:Ejecute iónico Cordova construir Android. Crea una carpeta de Android en Plataformas
Abra Android Studio y abra la carpeta de Android presente en nuestro proyecto project-plataformas-android. Déjelo por unos minutos para que construya el gradle
Después de
gradle build
finalizada obtenemos algunos errores para la inclusiónminSdVersion
enmanifest.xml
. Ahora lo que hacemos es simplemente eliminar<uses-sdk android:minSdkVersion="19" />
demanifest.xml
.Asegúrese de que se haya eliminado de ambas ubicaciones:
AndroidManifest.xml
.AndroidManifest.xml
.Ahora intente construir el gradle nuevamente y ahora se construye con éxito
Asegúrese de tener lo siguiente en la etiqueta Aplicación en Aplicación → manifiesto →
Androidmanifest.xml
:Abra
network_security_config
(aplicación → res → xml →network_security_config.xml
).Agregue el siguiente código:
Aquí
xxx.yyyy.com
está el enlace de su API HTTP. Asegúrese de no incluir ningún Http antes de la URL.Nota: Ahora compile la aplicación usando Android Studio (Build - Build Bundle's / APK - Build APK) y ahora puede usar esa aplicación y funciona bien en Android Pie. Si intentas compilar una aplicación usando iónico Cordova build android, anula todas estas configuraciones, así que asegúrate de usar Android Studio para compilar el Proyecto.
Si tiene instalada alguna versión anterior de la aplicación, desinstálela y pruébela, de lo contrario, se producirá un error:
fuente
Crear archivo - res / xml / network_security.xml
En network_security.xml ->
Abra AndroidManifests.xml:
fuente
Esto se hace por razones de seguridad, siempre debe preferir usar HTTPS (HTTP Secure ) siempre que sea posible.
Puedes leer más sobre esto aquí
Existen múltiples soluciones para este problema dependiendo de su condición.
Si está intentando comunicarse con un servicio propio, IE: su propio servidor web
Lado del servidor: debe agregar soporte HTTPS a ese servidor y usar HTTPS en lugar de HTTP. En estos días usted puede incluso hacer que para el uso de servicios gratuitos como LetsEncrypt y otros
del lado del cliente: Si está utilizando el
HttpURLConnection
deljava.net
paquete se puede cambiar aHttpsURLConnection
deljava.net.ssl
paquete, que tiene una similar, si no API idéntica, por lo que el interruptor debe ser sin esfuerzo.Si está utilizando un servicio de terceros, como Google, Facebook, un servicio meteorológico, etc.
En caso de que el servicio con el que se está comunicando sea compatible con HTTPS (que probablemente lo haga), puede cambiar la URL de su solicitud de
http://abc.xyz
ahttps://abc.xyz
.Como último recurso, si el servicio de terceros con el que desea comunicarse no es compatible con HTTPS o cualquier otra forma de comunicación segura, puede usar esta respuesta , pero nuevamente, esto no es recomendable, ya que frustra el propósito de esto tan necesario Característica de seguridad.
fuente
En mi caso, esa URL no funciona en el navegador también.
Lo verifico con https://www.google.com/
Y funcionó para mí.
fuente
Simplemente agregue android: usesCleartextTraffic = "true" dentro del archivo en AndroidManifest.xml
fuente
Para Xamarin.Android desarrolladores de asegúrese de que la implementación de HttpClient y SSL / TLS configurados como predeterminados.
Se puede encontrar en Opciones de Android -> Opciones avanzadas de Android.
fuente
Si bien la respuesta funcional, para mí, fue esta de @PabloCegarra:
Puede recibir una advertencia de seguridad con respecto a
cleartextTrafficPermitted="true"
Si conoce los dominios de la "lista blanca", debe mezclar tanto la respuesta aceptada como la anterior:
Este código funciona para mí, pero mi aplicación solo necesita recuperar datos de books.google.com. De esta manera desaparece la advertencia de seguridad.
fuente
Luego 2 pasos: -> manifiesto agregar dentro de la etiqueta de aplicación de manifiesto
// Paso 4 - >> Crear Drawable >> archivo Xml >> nombre como >> network_security_config.xml
fuente
Actualice a React Native 0.58.5 o una versión superior. Tienen
includeSubdomain
en sus archivos de configuración en RN 0.58.5.ChangeLog
En Rn 0.58.5 han declarado
network_security_config
con su dominio de servidor. La configuración de seguridad de red permite que una aplicación permita el tráfico de texto sin formato de un determinado dominio. Por lo tanto, no es necesario hacer un esfuerzo adicional declarandoandroid:usesCleartextTraffic="true"
en la etiqueta de aplicación de su archivo de manifiesto. Se resolverá automáticamente después de actualizar la versión RN.fuente
Después de cambiar la versión 9.0 de la API, aparece el error. El tráfico HTTP de texto claro a YOUR-API.DOMAIN.COM no está permitido (targetSdkVersion = "28"). en xamarin, xamarin.android y android studio.
Dos pasos para resolver este error en xamarin, xamarin.android y android studio.
Paso 1: Crear recursos de archivo / xml / network_security_config.xml
En network_security_config.xml
Paso 2: actualice AndroidManifest.xml -
Agregue android: networkSecurityConfig = "@ xml / network_security_config" en la etiqueta de la aplicación. p.ej:
fuente
agregar este parámetro en el encabezado resolvió mi problema en apiSauce React Native
fuente
Si está utilizando iónico y obtiene este error durante el complemento http nativo , debe hacerse la siguiente corrección:
Ir a
resources/android/xml/network_security_config.xml
cambiarlo aEso funcionó para mí!
fuente
Agregar ... android: usesCleartextTraffic = "true" ... a su archivo de manifiesto puede parecer que soluciona el problema, pero abre una amenaza para la integridad de los datos.
Por razones de seguridad, utilicé marcadores de posición de manifiesto con android: usesCleartextTraffic dentro del archivo de manifiesto (como en la Opción 3 de la respuesta aceptada, es decir, @ Hrishikesh Kadam ) para permitir solo texto claro en el entorno de depuración.
Dentro de mi archivo build.gradle (: app) , agregué un marcador de posición manifiesto como este:
Anote el nombre del marcador de posición cleartextTrafficPermitted en esta línea arriba
Luego, en mi Manifiesto de Android, utilicé el mismo marcador de posición ...
AndroidManifest.xml -
Con eso, el tráfico de texto sin formato solo se permite en el entorno de depuración.
fuente
Cuando una aplicación se comunica con servidores que utilizan un tráfico de red de texto sin cifrar, como HTTP ( no https ), podría aumentar el riesgo de piratería y manipulación del contenido. Los terceros pueden inyectar datos no autorizados o filtrar información sobre los usuarios. Es por eso que se alienta a los desarrolladores a asegurar el tráfico únicamente, como HTTPS. Aquí está la implementación y la referencia de cómo resolver este problema.
fuente
Intente presionar la URL con "https: //" en lugar de "http: //"
fuente
Utilizo Cordova 8 con cordova-plugin-whitelist 1.3.4 y la configuración predeterminada de mi aplicación no tiene acceso a Internet y solo agrego un parámetro en el manifest.xml -> android: usesCleartextTraffic = "true"
La ruta de mainfest cambió en Cordova 8: plataforma / android / app / src / main / AndroidManifest.xml.
esto es realmente estúpido porque es obvio que tu aplicación necesita acceso a internet ...
fuente
Solución simple y fácil [Formulario Xamarin]
Android Project
, luego haga clic enProperties
,AssemblyInfo.cs
y pega este código allí mismo:Uso
NSAppTransportSecurity
:Tienes que establecer la
NSAllowsArbitraryLoads
claveYES
debajo delNSAppTransportSecurity
diccionario en tuinfo.plist
archivo.fuente