Exemplos de código

Exemplo MQTT em Swift / Kotlin

Conecte apps nativos de iOS (Swift) e Android (Kotlin) a um broker MQTT. Comece no broker público gratuito e depois aponte o mesmo código para um broker privado e seguro no ConnectMQ.

Instalação
# iOS (Swift Package Manager): https://github.com/emqx/CocoaMQTT # Android (Gradle): implementation("com.hivemq:hivemq-mqtt-client:1.3.3")
Código-fonte no GitHubmqtt-code-samples/swift-kotlinClone os exemplos completos e prontos para rodar. Estrelas e pull requests são bem-vindos. Ver no GitHub

1. Teste no broker público gratuito

Sem precisar de conta: conecte-se a broker.connectmq.com na porta 1883 e comece a publicar em segundos.

Swift (CocoaMQTT)
import CocoaMQTT

let topic = "your-project/sensors/temperature" // Use um prefixo de tópico exclusivo: qualquer pessoa pode ler o broker público

// Conecta ao broker público gratuito (sem conta) (Cada cliente precisa de um client ID único)
let mqtt = CocoaMQTT(clientID: "ios-" + UUID().uuidString, host: "broker.connectmq.com", port: 1883)
mqtt.keepAlive = 30

// Executado quando a conexão é estabelecida
mqtt.didConnectAck = { mqtt, _ in
    // Assina o tópico de temperatura
    mqtt.subscribe(topic, qos: .qos1)
    // Publica uma leitura em JSON
    mqtt.publish(topic, withString: #"{"temperature":21.5}"#, qos: .qos1)
}
// Executado para cada mensagem de um tópico assinado
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" // Use um prefixo de tópico exclusivo: qualquer pessoa pode ler o broker público

    // Conecta ao broker público gratuito (sem conta) (Cada cliente precisa de um client ID único)
    val client = Mqtt5Client.builder()
        .identifier("android-" + UUID.randomUUID())
        .serverHost("broker.connectmq.com")
        .serverPort(1883)
        .automaticReconnectWithDefaultConfig()
        .buildBlocking()
    client.connect()

    // Executado para cada mensagem de um tópico assinado
    client.toAsync().publishes(MqttGlobalPublishFilter.ALL) { p ->
        println("${p.topic}: ${String(p.payloadAsBytes)}")
    }
    // Assina o tópico de temperatura
    client.subscribeWith().topicFilter(topic).qos(MqttQos.AT_LEAST_ONCE).send()
    // Publica uma leitura em JSON
    client.publishWith().topic(topic).qos(MqttQos.AT_LEAST_ONCE)
        .payload("""{"temperature":21.5}""".toByteArray()).send()
}

Broker MQTT público gratuito

O broker público é compartilhado: qualquer pessoa pode assinar seus tópicos. Nunca envie senhas, dados pessoais ou qualquer informação confidencial por ele.

Sobre o broker MQTT público gratuito

2. Vá para produção com o ConnectMQ

Para dispositivos reais, use um broker MQTT serverless privado no ConnectMQ em vez do público: criptografia TLS, usuário e senha para cada dispositivo e controle de acesso por tópico, totalmente gerenciado. Comece no plano Free — sem cartão de crédito.

Substitua YOUR_BROKER_HOST, YOUR_USERNAME e YOUR_PASSWORD pelos valores do seu painel do ConnectMQ.

Swift (CocoaMQTT)
import CocoaMQTT

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

// Conecta ao seu broker privado do ConnectMQ na porta 8883 (Cada cliente precisa de um client ID único)
let mqtt = CocoaMQTT(clientID: "ios-" + UUID().uuidString, host: "YOUR_BROKER_HOST", port: 8883)
mqtt.keepAlive = 30
// Usuário e senha do seu painel do ConnectMQ
mqtt.username = "YOUR_USERNAME"
mqtt.password = "YOUR_PASSWORD"
// TLS: o repositório de CAs do sistema verifica o certificado do broker
mqtt.enableSSL = true

// Executado quando a conexão é estabelecida
mqtt.didConnectAck = { mqtt, _ in
    // Assina o tópico de temperatura
    mqtt.subscribe(topic, qos: .qos1)
    // Publica uma leitura em JSON
    mqtt.publish(topic, withString: #"{"temperature":21.5}"#, qos: .qos1)
}
// Executado para cada mensagem de um tópico assinado
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"

    // Conecta ao seu broker privado do ConnectMQ na porta 8883 (Cada cliente precisa de um client ID único)
    val client = Mqtt5Client.builder()
        .identifier("android-" + UUID.randomUUID())
        .serverHost("YOUR_BROKER_HOST")
        .serverPort(8883)
        // TLS: o repositório de CAs do sistema verifica o certificado do broker
        .sslWithDefaultConfig()
        // Usuário e senha do seu painel do ConnectMQ
        .simpleAuth().username("YOUR_USERNAME").password("YOUR_PASSWORD".toByteArray()).applySimpleAuth()
        .automaticReconnectWithDefaultConfig()
        .buildBlocking()
    client.connect()

    // Executado para cada mensagem de um tópico assinado
    client.toAsync().publishes(MqttGlobalPublishFilter.ALL) { p ->
        println("${p.topic}: ${String(p.payloadAsBytes)}")
    }
    // Assina o tópico de temperatura
    client.subscribeWith().topicFilter(topic).qos(MqttQos.AT_LEAST_ONCE).send()
    // Publica uma leitura em JSON
    client.publishWith().topic(topic).qos(MqttQos.AT_LEAST_ONCE)
        .payload("""{"temperature":21.5}""".toByteArray()).send()
}

Perguntas frequentes sobre MQTT com Swift / Kotlin

Como conectar Swift / Kotlin a um broker MQTT?

Instale CocoaMQTT (iOS) · HiveMQ MQTT Client (Android), conecte-se ao host do broker na porta 1883 (ou 8883 com TLS) e depois assine um tópico e publique mensagens nele. Os exemplos desta página se conectam ao broker público gratuito broker.connectmq.com e a um broker privado do ConnectMQ.

Existe um broker MQTT gratuito para testar Swift / Kotlin?

Sim. broker.connectmq.com é um broker MQTT público e gratuito que não exige conta. Qualquer pessoa pode ler seus tópicos, então use-o apenas para testes e com um prefixo de tópico exclusivo.

Como proteger uma conexão MQTT com Swift / Kotlin?

Conecte-se via TLS na porta 8883 com um usuário e senha do seu painel do ConnectMQ e, em vez de usar o broker público, dê a cada dispositivo suas próprias credenciais e permissões de tópico.

Broker MQTT público gratuito

Teste qualquer exemplo em broker.connectmq.com — sem cadastro, com MQTT 3.1.1 e 5, TCP, TLS e WebSocket.

Sobre o broker MQTT público gratuito

MQTT serverless seguro para produção

Quando chegar a hora dos dispositivos reais, rode o mesmo código em um broker ConnectMQ privado e totalmente gerenciado, com TLS e credenciais por dispositivo.

Comece grátis

Seu broker MQTT privado está a poucos cliques de distância

Crie uma conta, receba as credenciais do seu broker e conecte seu primeiro dispositivo — sem servidores para instalar, atualizar ou escalar.

MQTT sobre WebSocket: Conecte um Navegador a um Broker MQTT com MQTT.js

Navegadores não conseguem abrir sockets TCP puros, então aplicações web falam MQTT sobre WebSocket. Construa um cliente funcional no navegador e outro em Node.js usando o servidor MQTT público broker.connectmq.com e aprenda a resolver os erros de conexão mais comuns.

9 min de leitura