Recibí informes de usuarios con Android 8 de que mi aplicación (que usa un feed de back-end) 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 posibles identificadores)

En Android 7 y versiones anteriores, todo funciona, no configuro android:usesCleartextTrafficel Manifiesto (y configurarlo en trueno ayuda, ese es el valor predeterminado de todos modos), ni uso la Información de seguridad de la red. Si llamo NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted(), regresa falsepara Android 8, truepara una versión anterior, 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.

respuesta

Según la configuración de seguridad de la red :

Starting with Android 9 (API level 28), cleartext support is disabled by default.

También eche un vistazo a Android M y la guerra contra el tráfico de texto sin cifrar

Explicación de Codelabs de Google

Opción 1 -

Primero intente presionar la URL con "https://" en lugar de "http://"

Opcion 2 -

Cree el archivo res/xml/network_security_config.xml -

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">api.example.com(to be adjusted)</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>

Opción 3 -

android:usesCleartextTraffic Doc

AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>

Además, como señaló la respuesta de @ david.s,android:targetSandboxVersion también puede ser un problema:

Según Manifest Docs -

android:targetSandboxVersion

The target sandbox for this app to use. The higher the sandbox version number, the higher the level of security. Its default value is 1; you can also set it to 2. Setting this attribute to 2 switches the app to a different SELinux sandbox. The following restrictions apply to a level 2 sandbox:

  • The default value of usesCleartextTraffic in the Network Security Config is false.
  • Uid sharing is not permitted.

Entonces Opción 4 -

Si lo tiene , redúzcalo android:targetSandboxVersiona<manifest>1

AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

Mi problema en Android 9 fue navegar en una vista web sobre dominios con http La solución de esta respuesta

<application 
    android:networkSecurityConfig="@xml/network_security_config"
    ...>

y:

res/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>
</network-security-config>

En el AndroidManifest encontré este parámetro:

android:networkSecurityConfig="@xml/network_security_config"

y @xml/network_security_config se define en network_security_config.xml como:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!--Set application-wide security config using base-config tag.-->
    <base-config cleartextTrafficPermitted="false"/>
</network-security-config>  

solo cambié cleartextTrafficPermitted a verdadero

Es posible que solo desee permitir el texto simple durante la depuración, pero mantenga los beneficios de seguridad de rechazar el texto simple en producción. Esto me resulta útil porque pruebo mi aplicación con un servidor de desarrollo que no es compatible con https. Aquí se explica cómo hacer cumplir https en producción, pero permitir texto sin cifrar en modo de depuración:

En build.gradle:

// Put this in your buildtypes debug section:
manifestPlaceholders = [usesCleartextTraffic:"true"]

// Put this in your buildtypes release section
manifestPlaceholders = [usesCleartextTraffic:"false"]

En la etiqueta de la aplicación en AndroidManifest.xml

android:usesCleartextTraffic="${usesCleartextTraffic}"

Si es posible, cambie su URL de HTTPaHTTPS ;

¡¡¡Funciona!!!

Ok, eso es ⇒⇒ NO ⇐⇐ los miles repetidos de add it to your Manifest, sino una pista que se basa en esto, pero le brinda un beneficio adicional (y tal vez alguna información de fondo).


La siguiente solución le permite configurar el protocolo (HTTP / HTTPS) por ENTORNO.

De esta manera, puede utilizarlo httppara su entorno DEV y httpspara su entorno de PRODUCCIÓN, ¡sin la necesidad de cambiarlo todo el tiempo! Y esto es necesario, porque generalmente no tiene un certificado https para su entorno local o de desarrollo, pero es IMPRESCINDIBLE para los entornos de producción (y tal vez para la puesta en escena).


Android tiene una especie de funcionalidad de sobrescritura para el directorio src.

Por defecto, tienes

/app/src/main

Pero puede agregar directorios adicionales para sobrescribir su AndroidManifest.xml. Así es como funciona:

  • Crear el directorio /app/src/debug
  • Dentro crea el AndroidManifest.xml

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í hay un ejemplo de cómo se ve para el permiso CLEARTEXT solicitado:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.yourappname">

    <application
            android:usesCleartextTraffic="true"
            android:name=".MainApplication"
            android:label="@string/app_name"
            android:icon="@mipmap/ic_launcher"
            android:allowBackup="false"
            android:theme="@style/AppTheme">
    </application>

</manifest>

Con este conocimiento, ahora es tan fácil como 1,2,3 sobrecargar sus permisos dependiendo de su depuración | principal | ambiente de liberación .

El gran beneficio de esto... no tiene elementos de depuración en su manifiesto de producción y mantiene una estructura sencilla y fácil de mantener.

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">***Your URL(ex: 127.0.0.1)***</domain>
    </domain-config>
</network-security-config>

En la sugerencia proporcionada anteriormente, proporcioné mi URL como http://xyz.abc.com/mno/

Cambié eso a xyz.abc.com y luego comenzó a funcionar.

Podría ser útil para alguien.

Recientemente tuvimos el mismo problema con Android 9, pero solo necesitábamos mostrar algunas direcciones URL dentro de WebView, nada muy especial. Así que agregar android:usesCleartextTraffic="true"a Manifest funcionó, pero no queríamos comprometer la seguridad de toda la aplicación por esto. Así que la solución fue cambiar los enlaces de httpahttps

Para proyectos React Native

Ya estaba arreglado en RN 0.59. Puede encontrar la diferencia de actualización de 0.58.6 a 0.59 . Puede aplicarla sin actualizar su versión RN, solo siga los pasos a continuación:

Crear archivos:

android/app/src/ debug /res/xml/ react_native_config.xml -

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

android/app/src/ debug / AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools">

  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

  <application tools:targetApi="28"
      tools:ignore="GoogleAppIndexingWarning" 
      android:networkSecurityConfig="@xml/react_native_config" />
</manifest>

Verifique la respuesta aceptada para conocer la causa raíz.

Eliminé esta línea del archivo de manifiesto de Android que ya está allí

 android:networkSecurityConfig="@xml/network_security_config" 

y agregado

android:usesCleartextTraffic="true"

esto en la etiqueta de la aplicación en el manifiesto

<application
    android:usesCleartextTraffic="true"
    android:allowBackup="true"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    >

entonces este error Cleartext Tráfico HTTP a overlay.openstreetmap.nl no permitido se ha ido para mí en Android 9 y 10. Espero que esto funcione para Android 8 también si te ayuda, no olvides votar gracias

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, la respuesta de @ Hrishikesh Kadam ) para permitir solo texto sin cifrar en el entorno de depuración.

Dentro de mi archivo build.gradle(:app) , agregué un marcador de posición de manifiesto como este:

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

        debug {
            manifestPlaceholders.cleartextTrafficPermitted ="true"
        }
    }

Tenga en cuenta el nombre del marcador de posición cleartextTrafficPermitted en esta línea anterior

            manifestPlaceholders.cleartextTrafficPermitted ="true"

Luego, en mi Manifiesto de Android, utilicé el mismo marcador de posición...

AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="${cleartextTrafficPermitted}"
        ...>
        ...
    </application>
</manifest>

Con eso, el tráfico de texto sin cifrar solo se permite en el entorno de depuración.

Bien, me he dado cuenta de 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; debería 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:

Specifies the target sandbox this app wants to use. Higher sanbox versions will have increasing levels of security.

The default value of this attribute is 1.

Obviamente, también agrega un nuevo nivel de política de seguridad, al menos en Android 8.

Solución simple y más fácil [Forma de Xamarin]

For Android

  1. Vaya Android Projecta , luego haga clic en Properties,

ingrese la descripción de la imagen aquí

  1. Abra AssemblyInfo.csy pegue este código allí mismo:

    [assembly: Application(UsesCleartextTraffic =true)]

ingrese la descripción de la imagen aquí

For iOS

Uso NSAppTransportSecurity:

Ingrese la descripción de la imagen aquí

Debe configurar la NSAllowsArbitraryLoadsclave para YESdebajo del NSAppTransportSecuritydiccionario en su info.plistarchivo.

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

Configuración de listas

Para aplicar estas diversas respuestas a Xamarin.Android, puede usar atributos de nivel de clase y ensamblaje en lugar de editar manualmente elAndroidManifest.xml

Por supuesto, se necesita permiso de Internet (duh ..):

[assembly: UsesPermission(Android.Manifest.Permission.Internet)]

Nota: Por lo general, los atributos de nivel de ensamblaje se agregan a su AssemblyInfo.csarchivo, pero cualquier archivo, por debajo usingy por encima de las namespaceobras.

Luego, en su subclase de aplicación (cree una si es necesario), puede agregar NetworkSecurityConfiguna referencia a un Resources/xml/ZZZZ.xmlarchivo:

#if DEBUG
[Application(AllowBackup = false, Debuggable = true, NetworkSecurityConfig = "@xml/network_security_config")]
#else
[Application(AllowBackup = true, Debuggable = false, NetworkSecurityConfig = "@xml/network_security_config"))]
#endif
public class App : Application
{
    public App(IntPtr javaReference, Android.Runtime.JniHandleOwnership transfer) : base(javaReference, transfer) { }
    public App() { }

    public override void OnCreate()
    {
        base.OnCreate();
    }
}

Cree un archivo en la Resources/xmlcarpeta (cree la xmlcarpeta si es necesario).

Archivo de ejemplo xml/network_security_config, ajuste según sea necesario (ver otras respuestas)

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

También puede utilizar el UsesCleartextTrafficparámetro en el ApplicationAttribute:

#if DEBUG
[Application(AllowBackup = false, Debuggable = true, UsesCleartextTraffic = true)]
#else
[Application(AllowBackup = true, Debuggable = false, UsesCleartextTraffic = true))]
#endif

Actualización de diciembre de 2019 iónica - 4.7.1

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

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

Agregue el contenido anterior en el archivo .xml del manifiesto de Android

Versiones anteriores de iónico

  1. Asegúrese de tener lo siguiente en su config.xmlProyecto Ionic:

    <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. Ejecute ionic Cordova build android. Crea una carpeta de Android en Plataformas

  3. Abra Android Studio y abra la carpeta Android presente en nuestro proyecto project-platforms-android. Déjalo unos minutos para que construya el gradle.

  4. Una vez gradle buildque finaliza, obtenemos algunos errores para incluir minSdVersionen manifest.xml. Ahora lo que hacemos es simplemente eliminar <uses-sdk android:minSdkVersion="19" />de manifest.xml.

    Asegúrese de que se elimine de ambas ubicaciones:

    1. aplicación → manifiestos → AndroidManifest.xml.
    2. CordovaLib → manifiestos → AndroidManifest.xml.

    Ahora intente construir el gradle nuevamente y ahora se construye con éxito

  5. Asegúrese de tener lo siguiente en la etiqueta de la aplicación en la aplicación → manifiesto → Androidmanifest.xml:

    <application
    android:networkSecurityConfig="@xml/network_security_config"  android:usesCleartextTraffic="true" >
    
  6. Abrir network_security_config(aplicación → res → xml → network_security_config.xml).

    Agrega el siguiente código:

    <?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>
    

Aquí xxx.yyyy.comestá el enlace de su API HTTP. Asegúrese de no incluir ningún Http antes de la URL.

Nota: Ahora crea la aplicación usando Android Studio (Build -- Build Bundle's/APK -- Build APK) y ahora puedes usar esa aplicación y funciona bien en Android Pie. Si intenta compilar una aplicación usando ionic Cordova build android, anula todas estas configuraciones, así que asegúrese de usar Android Studio para compilar el proyecto.

Si tiene instaladas versiones anteriores de la aplicación, desinstálelas y pruébelas o, de lo contrario, obtendrá algún error:

App not Installed

Mientras que la respuesta de trabajo, para mí, fue esta de @PabloCegarra:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

Es posible que reciba una advertencia de seguridad con respecto a lacleartextTrafficPermitted="true"

Si conoce los dominios a la 'lista blanca', debe mezclar la respuesta aceptada y la anterior:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="false">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">books.google.com</domain>
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </domain-config>
</network-security-config>

Este código me funciona, pero mi aplicación solo necesita recuperar datos de books.google.com. De esta forma desaparece la advertencia de seguridad.

También tengo el mismo error "Tráfico HTTP de texto claro no permitido" mientras desarrollo 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 activará. Así que he agregado la siguiente solución para eso.

He agregado tráfico de texto sin cifrar en el manifiesto

 android:usesCleartextTraffic="true"

Luego, agregué una especificación de conexión en el tiempo de creación de OKHttp de la clase de configuración de actualización.

 .connectionSpecs(CollectionsKt.listOf(ConnectionSpec.MODERN_TLS, ConnectionSpec.CLEARTEXT))

La creación completa de OkHttpClient se proporciona a continuación

OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .readTimeout(10, TimeUnit.SECONDS)
        .connectTimeout(10, TimeUnit.SECONDS)
        .cache(null)
        .connectionSpecs(CollectionsKt.listOf(ConnectionSpec.MODERN_TLS, ConnectionSpec.CLEARTEXT))
        .addInterceptor(new NetworkInterceptor(context))
        .addInterceptor(createLoggingInterceptor())
        .addInterceptor(createSessionExpiryInterceptor())
        .addInterceptor(createContextHeaderInterceptor())
        .build();

Crear archivo - res / xml / network_security.xml

En red_seguridad.xml ->

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

Abra AndroidManifests.xml:

 android:usesCleartextTraffic="true" //Add this line in your manifests

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:usesCleartextTraffic="true"
        android:theme="@style/AppTheme">
 cleartext support is disabled by default.Android in 9 and above

 Try This one I hope It will work fine

1 Step:->  add inside android build gradle (Module:App)
            useLibrary 'org.apache.http.legacy'

  android {
               compileSdkVersion 28
              useLibrary 'org.apache.http.legacy'

          }

Luego, 2 pasos: -> agregar manifiesto dentro de la etiqueta de aplicación de manifiesto

<application
    android:networkSecurityConfig="@xml/network_security_config">//add drawable goto Step 4

   // Step --->3  add to top this line  
     <uses-library
        android:name="org.apache.http.legacy"
        android:required="false" />

</application>

//Paso 4-->> Crear Drawable>>Archivo Xml>>nombrar como>> 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>
    </network-security-config>

Ponga lo siguiente en su resources/android/xml/network_security_config.xml:

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

Esto resuelve Failed to load resource: net::ERR_CLEARTEXT_NOT_PERMITTEDel problema en Android para Cordova / Ionic.

Simplemente agregue android:usesCleartextTraffic="true" dentro del archivo AndroidManifest.xml

En mi caso, esa URL tampoco funciona en el navegador.

Compruebo con https://www.google.com/

webView.loadUrl("https://www.google.com/")

Y funcionó para mí.

Para los desarrolladores de Xamarin.Android , asegúrese de que la implementación de HttpClient y SSL/TLS estén configurados como predeterminados.

Se puede encontrar en Opciones de Andorid -> Opciones avanzadas de Android.

ingrese la descripción de la imagen aquí

Esto se hace por razones de seguridad, siempre debe preferir usar HTTPS (HTTP Secure ) siempre que sea posible.
Puedes leer más al respecto aquí

Existen múltiples soluciones para este problema dependiendo de su condición.

Si está tratando de 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, incluso puede hacerlo de forma gratuita utilizando servicios como LetsEncrypt y otros
. Lado del cliente: si está utilizando el HttpURLConnectiondel java.netpaquete, puede cambiar al HttpsURLConnectiondel java.net.sslpaquete, tiene una API similar, si no idéntica, por lo que el cambio debería 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 sea), puede cambiar la URL de su solicitud de http://abc.xyza https://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 se recomienda ya que anula el propósito de esta tan necesaria función de seguridad

videoView no puede abrir este video Video en línea

Cree el archivo res/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>
</network-security-config>

Nuevo en el archivo AndroidManifest.xml en la aplicación:

android:networkSecurityConfig="@xml/network_security_config"

https://techprogrammingideas.blogspot.com/2021/02/android-code-for-displaying-video-with.html

https://youtu.be/90hWWAqfdUU

Actualice a React Native 0.58.5 o una versión superior. Tienen includeSubdomainen sus archivos de configuración en RN 0.58.5.

registro de cambios

En Rn 0.58.5 han declarado network_security_configcon su dominio de servidor. La configuración de seguridad de la red permite que una aplicación permita el tráfico de texto no cifrado desde un determinado dominio. Por lo tanto, no es necesario hacer un esfuerzo adicional declarando android:usesCleartextTraffic="true"en la etiqueta de la aplicación de su archivo de manifiesto. Se resolverá automáticamente después de actualizar la versión RN.

Después de cambiar la versión 9.0 de la API, aparece el error No se permite el tráfico HTTP de texto claro a TU-API.DOMAIN.COM (targetSdkVersion="28"). en xamarin, xamarin.android y android studio.

Dos pasos para solucionar este error en xamarin, xamarin.android y android studio.

Paso 1: Cree el archivo resources/xml/network_security_config.xml

En network_security_config.xml

<?xml version="1.0" encoding="utf-8" ?>
<network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">mobapi.3detrack.in</domain>
  </domain-config>
</network-security-config>

Paso 2: actualice AndroidManifest.xml -

Agregue android:networkSecurityConfig="@xml/network_security_config" en la etiqueta de la aplicación. p.ej:

<application android:label="your App Name" android:icon="@drawable/icon" android:networkSecurityConfig="@xml/network_security_config">

agregar este parámetro en el encabezado resolvió mi problema en apiSauce React Native

"Content-Type": "application/x-www-form-urlencoded",
  Accept: "application/json"

Si está utilizando ionic y obtiene este error durante el complemento http nativo , se debe realizar la siguiente solución:

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>

¡Eso funcionó para mí!

Cleartext is any transmitted or stored information that is not encrypted or meant to be encrypted.

Cuando una aplicación se comunica con servidores que utilizan un tráfico de red de texto no cifrado, 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 proteger solo el tráfico, como HTTPS. Aquí está la implementación y la referencia de cómo resolver este problema.