Android

Solución Android y Java – CLEARTEXT communication not permitted by network security policy

Resumen: en este post te mostraré la solución al error de Android que dice así:

java.net.UnknownServiceException: CLEARTEXT communication to sitio.com not permitted by network security policy

Esto es debido a que estamos usando HTTP, y no HTTPS.

Solución a CLEARTEXT communication en Android

Como lo dije, este error de Android en Java ocurre porque estamos haciendo una petición HTTP a un host no seguro, es decir, que no utiliza HTTPS.

Por ello es que dice cleartext o texto claro, es decir, que no está encriptado como las comunicaciones por HTTPS.

En otras palabras, hacemos peticiones a un sitio como:

http://sitio.com/mi_app

En lugar de:

https://sitio.com/mi_app

Ya sea por no tener un certificado SSL o porque está mal la ruta.

Solución 1: usa un dominio HTTPS

La solución más simple y segura (pues así evitas ataques de Man in the middle o cosas de esas) es usar un host que tenga HTTPS (comprando uno, usando Let’s encrypt, etcétera), cambiando la URL y listo.

La desventaja de esto es que es complicado cuando se hacen pruebas locales, por ello veamos la solución 2.

Solución 2: modificar el manifiesto

En tu AndroidManifest.xml, dentro de <application> agrega la siguiente línea:

android:usesCleartextTraffic="true"

De manera que, ahora se vea aproximadamente así:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="paquete">
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:usesCleartextTraffic="true"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    </application>
</manifest>

Simplemente presta atención a la línea 6, que indica que usa tráfico en texto plano o claro, sin encriptar.

Conclusión

Yo recomiendo la opción 2 para pruebas locales, pero también recomiendo usar un servidor HTTPS cuando lleves tu app a producción.

 

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.