Ejemplos de código

Ejemplo MQTT con Swift / Kotlin

Conecta apps nativas de iOS (Swift) y Android (Kotlin) a un broker MQTT. Empieza con el broker público gratuito y después apunta el mismo código a un broker privado y seguro en ConnectMQ.

Instalación
# iOS (Swift Package Manager): https://github.com/emqx/CocoaMQTT # Android (Gradle): implementation("com.hivemq:hivemq-mqtt-client:1.3.3")
Código fuente en GitHubmqtt-code-samples/swift-kotlinClona los ejemplos completos y listos para ejecutar. Se agradecen estrellas y pull requests. Ver en GitHub

1. Pruébalo en el broker público gratuito

Sin necesidad de cuenta: conéctate a broker.connectmq.com en el puerto 1883 y empieza a publicar en segundos.

Swift (CocoaMQTT)
import CocoaMQTT

let topic = "your-project/sensors/temperature" // Usa un prefijo de topic único: cualquiera puede leer el broker público

// Conectar al broker público gratuito (sin cuenta) (Cada cliente necesita un client ID único)
let mqtt = CocoaMQTT(clientID: "ios-" + UUID().uuidString, host: "broker.connectmq.com", port: 1883)
mqtt.keepAlive = 30

// Se ejecuta al establecer la conexión
mqtt.didConnectAck = { mqtt, _ in
    // Suscribirse al topic de temperatura
    mqtt.subscribe(topic, qos: .qos1)
    // Publicar una lectura en JSON
    mqtt.publish(topic, withString: #"{"temperature":21.5}"#, qos: .qos1)
}
// Se ejecuta con cada mensaje de un topic suscrito
mqtt.didReceiveMessage = { _, message, _ in
    print(message.topic, message.string ?? "")
}
_ = mqtt.connect()
Kotlin (HiveMQ MQTT Client)
import com.hivemq.client.mqtt.MqttGlobalPublishFilter
import com.hivemq.client.mqtt.datatypes.MqttQos
import com.hivemq.client.mqtt.mqtt5.Mqtt5Client
import java.util.UUID

fun main() {
    val topic = "your-project/sensors/temperature" // Usa un prefijo de topic único: cualquiera puede leer el broker público

    // Conectar al broker público gratuito (sin cuenta) (Cada cliente necesita un client ID único)
    val client = Mqtt5Client.builder()
        .identifier("android-" + UUID.randomUUID())
        .serverHost("broker.connectmq.com")
        .serverPort(1883)
        .automaticReconnectWithDefaultConfig()
        .buildBlocking()
    client.connect()

    // Se ejecuta con cada mensaje de un topic suscrito
    client.toAsync().publishes(MqttGlobalPublishFilter.ALL) { p ->
        println("${p.topic}: ${String(p.payloadAsBytes)}")
    }
    // Suscribirse al topic de temperatura
    client.subscribeWith().topicFilter(topic).qos(MqttQos.AT_LEAST_ONCE).send()
    // Publicar una lectura en JSON
    client.publishWith().topic(topic).qos(MqttQos.AT_LEAST_ONCE)
        .payload("""{"temperature":21.5}""".toByteArray()).send()
}

Broker MQTT público gratuito

El broker público es compartido: cualquiera puede suscribirse a tus topics. Nunca envíes por él contraseñas, datos personales ni información confidencial.

Acerca del broker MQTT público gratuito

2. Pasa a producción con ConnectMQ

Para dispositivos reales, usa un broker MQTT serverless privado en ConnectMQ en lugar del público: cifrado TLS, usuario y contraseña para cada dispositivo y control de acceso por topic, totalmente gestionado. Empieza con el plan Free, sin tarjeta.

Sustituye YOUR_BROKER_HOST, YOUR_USERNAME y YOUR_PASSWORD por los valores de tu panel de ConnectMQ.

Swift (CocoaMQTT)
import CocoaMQTT

let topic = "your-project/sensors/temperature"

// Conectar a tu broker privado de ConnectMQ en el puerto 8883 (Cada cliente necesita un client ID único)
let mqtt = CocoaMQTT(clientID: "ios-" + UUID().uuidString, host: "YOUR_BROKER_HOST", port: 8883)
mqtt.keepAlive = 30
// Usuario y contraseña de tu panel de ConnectMQ
mqtt.username = "YOUR_USERNAME"
mqtt.password = "YOUR_PASSWORD"
// TLS: el almacén de CA del sistema verifica el certificado del broker
mqtt.enableSSL = true

// Se ejecuta al establecer la conexión
mqtt.didConnectAck = { mqtt, _ in
    // Suscribirse al topic de temperatura
    mqtt.subscribe(topic, qos: .qos1)
    // Publicar una lectura en JSON
    mqtt.publish(topic, withString: #"{"temperature":21.5}"#, qos: .qos1)
}
// Se ejecuta con cada mensaje de un topic suscrito
mqtt.didReceiveMessage = { _, message, _ in
    print(message.topic, message.string ?? "")
}
_ = mqtt.connect()
Kotlin (HiveMQ MQTT Client)
import com.hivemq.client.mqtt.MqttGlobalPublishFilter
import com.hivemq.client.mqtt.datatypes.MqttQos
import com.hivemq.client.mqtt.mqtt5.Mqtt5Client
import java.util.UUID

fun main() {
    val topic = "your-project/sensors/temperature"

    // Conectar a tu broker privado de ConnectMQ en el puerto 8883 (Cada cliente necesita un client ID único)
    val client = Mqtt5Client.builder()
        .identifier("android-" + UUID.randomUUID())
        .serverHost("YOUR_BROKER_HOST")
        .serverPort(8883)
        // TLS: el almacén de CA del sistema verifica el certificado del broker
        .sslWithDefaultConfig()
        // Usuario y contraseña de tu panel de ConnectMQ
        .simpleAuth().username("YOUR_USERNAME").password("YOUR_PASSWORD".toByteArray()).applySimpleAuth()
        .automaticReconnectWithDefaultConfig()
        .buildBlocking()
    client.connect()

    // Se ejecuta con cada mensaje de un topic suscrito
    client.toAsync().publishes(MqttGlobalPublishFilter.ALL) { p ->
        println("${p.topic}: ${String(p.payloadAsBytes)}")
    }
    // Suscribirse al topic de temperatura
    client.subscribeWith().topicFilter(topic).qos(MqttQos.AT_LEAST_ONCE).send()
    // Publicar una lectura en JSON
    client.publishWith().topic(topic).qos(MqttQos.AT_LEAST_ONCE)
        .payload("""{"temperature":21.5}""".toByteArray()).send()
}

Preguntas frecuentes sobre MQTT con Swift / Kotlin

¿Cómo conecto Swift / Kotlin a un broker MQTT?

Instala CocoaMQTT (iOS) · HiveMQ MQTT Client (Android), conéctate al host del broker en el puerto 1883 (o 8883 con TLS), suscríbete a un topic y publica mensajes en él. Los ejemplos de esta página se conectan al broker público gratuito broker.connectmq.com y a un broker privado de ConnectMQ.

¿Hay un broker MQTT gratuito para probar Swift / Kotlin?

Sí. broker.connectmq.com es un broker MQTT público y gratuito que no requiere cuenta. Cualquiera puede leer sus topics, así que úsalo solo para pruebas y con un prefijo de topic único.

¿Cómo protejo una conexión MQTT con Swift / Kotlin?

Conéctate mediante TLS en el puerto 8883 con un usuario y una contraseña de tu panel de ConnectMQ, y asigna a cada dispositivo sus propias credenciales y permisos de topic en lugar de usar el broker público.

Broker MQTT público gratuito

Prueba cualquier ejemplo en broker.connectmq.com: sin registro, con MQTT 3.1.1 y 5, TCP, TLS y WebSocket.

Acerca del broker MQTT público gratuito

MQTT serverless seguro para producción

Cuando llegue el momento de usar dispositivos reales, ejecuta el mismo código en un broker de ConnectMQ privado y totalmente gestionado, con TLS y credenciales por dispositivo.

Empieza gratis

Tu broker MQTT privado, a unos pocos clics

Crea una cuenta, obtén las credenciales de tu broker y conecta tu primer dispositivo, sin servidores que instalar, parchear ni escalar.

MQTT sobre WebSocket: conecta un navegador a un broker MQTT con MQTT.js

Los navegadores no pueden abrir sockets TCP directos, así que las aplicaciones web hablan MQTT sobre WebSocket. Construye un cliente de navegador y un cliente Node.js funcionales contra broker.connectmq.com y aprende a resolver los errores de conexión más comunes.

9 min de lectura