Pruebas de brokers

Prueba un broker MQTT desde Android e iOS

Cómo probar un broker MQTT desde un móvil Android o iOS: cliente web por WSS, apps MQTT, Termux, emuladores y las trampas de red propias de las redes móviles.

Actualizado · 7 min de lectura

Prueba un broker MQTT desde Android e iOS

Para probar un broker MQTT desde un móvil, la vía más rápida no necesita ninguna app: abre el cliente MQTT online en Chrome para Android o en Safari para iOS, conéctate por WebSocket seguro (wss), suscríbete y publica. Para algo más profundo —TCP puro en 1883, TLS en 8883, comportamiento en segundo plano— usa una app MQTT nativa o una terminal en el dispositivo. Esta guía cubre cada enfoque y las trampas de red que solo aparecen en móviles.

¿Por qué probar desde el móvil?

Tu portátil en el Wi-Fi de la oficina no está donde están tus usuarios. Una prueba móvil responde preguntas que una de escritorio no puede:

  • ¿Acepta el broker conexiones desde redes móviles, no solo desde la IP de tu oficina?
  • ¿El NAT del operador y los timeouts de inactividad matan una conexión silenciosa al cabo de unos minutos?
  • ¿Sobrevive la conexión de tu app al bloqueo de pantalla, al cambio de app y al cambio de red (Wi-Fi → 4G/5G)?
  • ¿Se validan los certificados en el almacén de confianza del móvil, que puede ser distinto del de tu escritorio?

Opción 1 — El navegador, por WSS

Los navegadores móviles soportan WebSockets, así que MQTT sobre WebSockets funciona exactamente igual que en escritorio.

  1. En el móvil, abre testmqtt.com/client.
  2. Deja el protocolo en WSS. Para tu propio broker, elige Custom broker… e introduce el host broker.connectmq.com, el puerto 8084, la ruta mqtt y las credenciales de tu usuario de prueba.
  3. Suscríbete a un topic único como testmqtt/phone-4c21/# y publica en testmqtt/phone-4c21/hello.

Para no teclear en un teclado pequeño, construye el enlace en el portátil y ábrelo en el móvil (envíatelo o conviértelo en un código QR):

Open this link on the phone
https://testmqtt.com/client?url=wss://broker.connectmq.com:8084/mqtt&topic=testmqtt/phone-4c21/%23

Después publica desde el portátil y observa cómo lo recibe el móvil: eso demuestra la ruta completa desde un cliente de escritorio, a través del broker, hasta una red móvil:

Laptop → broker → phone
mosquitto_pub -h broker.connectmq.com -p 1883 \
  -t testmqtt/phone-4c21/hello -m "from laptop" -q 1

Cambia el móvil de Wi-Fi a datos móviles y repite. Si funciona en una y no en la otra, tienes un problema de red, no del broker. La versión paso a paso para escritorio está en prueba un broker MQTT desde tu navegador.

Opción 2 — Apps MQTT nativas

Las apps nativas abren sockets TCP y TLS reales, así que prueban los mismos puertos que usan tus dispositivos. Ambas tiendas ofrecen varios clientes MQTT de uso general y apps de dashboards: en Android, apps como MyMQTT, MQTT Dash e IoT MQTT Panel; en iOS, apps como MQTTool e IoT MQTT Panel. La disponibilidad y las funciones cambian, así que revisa la ficha de la tienda y prefiere apps que te permitan:

CapacidadPor qué importa para probar
TCP y TLS (8883)Probar el puerto que usan realmente tus dispositivos
Opciones de CA / certificado propiosCAs privadas y certificados de cliente
Usuario / contraseñaBrokers autenticados y comprobación de ACLs
Elección de MQTT 3.1.1 / 5Coincidir con el firmware de tus dispositivos
Suscripción con wildcardsObservar todo el subárbol de un dispositivo
Opciones de retain y QoSReproducir el comportamiento real de los dispositivos

Usa un usuario de prueba dedicado con ACLs limitadas a topics de prueba: las apps móviles suelen guardar las credenciales en el dispositivo.

Opción 3 — Una terminal en el móvil

En Android, Termux te da un entorno Linux con los clientes de línea de comandos de Mosquitto:

Termux on Android
pkg install mosquitto
mosquitto_sub -h broker.connectmq.com -p 1883 -t 'testmqtt/phone-4c21/#' -v &
mosquitto_pub -h broker.connectmq.com -p 1883 -t testmqtt/phone-4c21/hello -m "from termux"

Los mismos comandos funcionan con -p 8883 y --capath o --cafile para TLS (apuntando a un bundle de CAs que tengas en el dispositivo). En iOS, las apps de terminal son más limitadas; para scripting en iPhone suele ser más sencillo usar una app nativa o el navegador. Una vez que la CLI funciona, todo lo de ejemplos de mosquitto_pub y mosquitto_sub también sirve en el móvil.

Probar tu propia app: emuladores y simuladores

Cuando la app que estás desarrollando no conecta, averigua si es el código o la red:

  • Emulador de Android: localhost dentro del emulador es el propio emulador. Usa 10.0.2.2 para llegar a un broker que corre en tu máquina de desarrollo.
  • Simulador de iOS: comparte la pila de red del Mac, así que localhost llega a un broker en el Mac. Un iPhone físico no: necesita la IP de red local del Mac.
  • Dispositivos físicos: el broker debe escuchar en la interfaz de red local, no solo en 127.0.0.1 (Mosquitto 2.x sin listener configurado solo acepta conexiones locales), y el firewall del host debe permitir el puerto.

Las reglas de la plataforma también pueden bloquear conexiones en texto plano en tu app. La configuración de seguridad de red de Android bloquea por defecto el tráfico cleartext en las pilas basadas en HTTP, lo que afecta a ws://; App Transport Security de iOS se aplica a las conexiones basadas en URLSession, incluidos los WebSockets. Usa wss:// o TLS (8883) en lugar de añadir excepciones. La configuración específica de cada librería está en MQTT en Android con Kotlin y MQTT en iOS con Swift.

Trampas de las redes móviles

SíntomaCausa probableQué probar
Funciona por Wi-Fi, timeout con datos móvilesLa red restringe los puertos 1883/8883Prueba WSS en 443 si tu broker lo ofrece; consulta al operador/MDM
La conexión cae tras unos minutos en silencioTimeout de inactividad del NAT del operadorKeep alive por debajo del timeout (p. ej. 30–60 s); consulta timeouts de NAT
Se desconecta cada vez que se bloquea la pantallaEl sistema suspende la appEs lo esperado; diseña para reconectar + sesiones persistentes
Ráfaga de reconexiones al cambiar de redLa IP cambia en el handoverReconexión limpia con backoff, mismo client ID
Connection refused solo desde el móvilBroker ligado a localhost o regla de firewallEscucha en 0.0.0.0, abre el puerto, prueba con nc desde otra máquina
Error de certificado en el móvil, bien en escritorioFalta un intermedio o la CA es privadaSirve la cadena completa; instala la CA en los dispositivos de prueba

Para pruebas realistas de redes inestables en el laboratorio, consulta probar MQTT en condiciones de red móvil.

Un plan de prueba móvil de cinco minutos

  1. Navegador del móvil por Wi-Fi: conecta por WSS, suscríbete, publica, recibe.
  2. La misma prueba con datos móviles.
  3. Publica desde el portátil y recibe en el móvil (y al revés).
  4. App nativa o Termux: repite por TCP 1883 y TLS 8883 con tus credenciales reales.
  5. Deja una suscripción inactiva diez minutos; comprueba si sobrevive.
  6. Bloquea la pantalla, cambia de red, desbloquea: confirma que tu app se reconecta y se vuelve a suscribir.

Abre el cliente en tu móvil

Probar desde un móvil lleva minutos y detecta problemas que ninguna prueba de escritorio verá: puertos bloqueados en datos móviles, timeouts de NAT, apps dormidas y cadenas de certificados que solo fallan en el almacén de confianza del dispositivo. Empieza en el navegador móvil por WSS y pasa después a un cliente nativo para los puertos y el comportamiento de los que depende tu app.

Preguntas frecuentes

¿Cuál es la forma más rápida de probar un broker MQTT desde el móvil?

Abre un cliente MQTT online como testmqtt.com/client en el navegador del móvil y conéctate por WebSocket seguro (wss, a menudo en el puerto 8084 o 443). Funciona igual en Chrome para Android y en Safari para iOS y no requiere instalar ninguna app.

¿Por qué mi móvil no llega al broker MQTT que corre en mi portátil?

localhost en el móvil es el propio móvil. Usa la IP de red local del portátil, asegúrate de que ambos están en la misma red, de que el broker escucha en todas las interfaces y no solo en 127.0.0.1, y de que el firewall del portátil permite el puerto.

¿Por qué MQTT funciona por Wi-Fi pero no con datos móviles?

Algunas redes móviles y de invitados restringen puertos que no son web, como 1883 y 8883, y el NAT del operador puede cortar rápido las conexiones inactivas. Prueba el puerto 443 o WebSockets sobre 443 si está disponible y usa un keep alive menor que el timeout de inactividad de la red.