java - ¿Cómo permitir todos los tipos de conexión de red HTTP y HTTPS en Android(9) Pie?
kotlin android-9.0-pie (6)
Desde Android 9 Pie ahora, las solicitudes sin cifrado nunca funcionarán. Y, de forma predeterminada, el sistema esperará que uses TLS de forma predeterminada. Puede leer esta función aquí, así que si solo realiza solicitudes a través de HTTPS, estará seguro. Pero, ¿qué pasa con las aplicaciones que realizan solicitudes a través de diferentes sitios, por ejemplo, aplicaciones similares a un navegador?
¿Cómo puedo habilitar solicitudes para todos los tipos de conexiones HTTP y HTTPS en Android 9 Pie?
La
solución totalmente funcional
para
React-native
usuarios
React-native
Android
o
React-native
que enfrentan este problema simplemente agrega este
android:usesCleartextTraffic="true"
en el archivo AndroidManifest.xml como este:
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning">
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
entre la etiqueta
<application>
..
</application>
como esta:
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:allowBackup="false"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning">
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
<activity
android:name=".MainActivity"
android:label="@string/app_name"/>
</application>
La forma fácil de implementar esto es usar este atributo en su
AndroidManifest.xml
donde permite que todos los
http
para todas las solicitudes:
android:usesCleartextTraffic="true"
Pero en caso de que desee
más configuraciones
para diferentes enlaces, por ejemplo, permitiendo
http
para algunos dominios, pero no para otros dominios, debe proporcionar el archivo
networkSecurityConfig
.
Para hacer esto en Android 9 Pie, tendrá que configurar un
networkSecurityConfig
en su etiqueta de
application
Manifest de la siguiente manera:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config">
</application>
</manifest>
Luego, en su carpeta
xml
, ahora tiene que crear un archivo llamado
network_security_config
tal como lo ha nombrado en el Manifiesto y desde allí el contenido de su archivo debería ser así para habilitar todas las solicitudes sin encriptaciones:
<?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>
Desde allí eres bueno para ir. Ahora su aplicación hará solicitudes para todo tipo de conexiones. Para obtener información adicional sobre este tema, lea aquí .
Para las aplicaciones
React Native
mientras se ejecuta en depuración, agregue el
xml block
mencionado por @Xenolion a
react_native_config.xml
ubicado en
<project>/android/app/src/debug/res/xml
Similar al siguiente fragmento de código:
<?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>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
Puede verificar si está enviando clearText a través de HTTP Fix:
https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
O
En el caso de desaprobación del cliente HTTP Apache (de Google): con Android 6.0, eliminamos el soporte para el cliente HTTP Apache.
A partir de Android 9, esa biblioteca se elimina de la ruta de inicio y no está disponible para las aplicaciones de forma predeterminada.
Para continuar usando el cliente HTTP de Apache, las aplicaciones que se dirigen a Android 9 y superiores pueden agregar lo siguiente a su AndroidManifest.xml:
Fuente https://developer.android.com/about/versions/pie/android-9.0-changes-28
Simplemente configure el indicador
usesCleartextTraffic
en la etiqueta de la aplicación del archivo
AndroidManifest.xml
.
No es necesario crear un archivo de configuración para Android.
<application
android:usesCleartextTraffic="true"
.
.
.>
Una forma sencilla es configurar
android:usesCleartextTraffic="true"
en tu
AndroidManifest.xml
android:usesCleartextTraffic="true"
Tu
AndroidManifest.xml
parece a
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.dww.drmanar">
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme"
tools:targetApi="m">
<activity
android:name=".activity.SplashActivity"
android:theme="@style/FullscreenTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Espero que esto ayude.