java android kotlin android-9.0-pie android-network-security-config

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.