Codebeispiele

MQTT-Beispiel für Swift / Kotlin

Verbinden Sie native iOS-Apps (Swift) und Android-Apps (Kotlin) mit einem MQTT-Broker. Starten Sie auf dem kostenlosen öffentlichen Broker und verbinden Sie denselben Code anschließend mit einem sicheren privaten Broker auf ConnectMQ.

Installation
# iOS (Swift Package Manager): https://github.com/emqx/CocoaMQTT # Android (Gradle): implementation("com.hivemq:hivemq-mqtt-client:1.3.3")
Quellcode auf GitHubmqtt-code-samples/swift-kotlinKlonen Sie die vollständigen, lauffähigen Beispiele. Stars und Pull Requests sind willkommen. Auf GitHub ansehen

1. Auf dem kostenlosen öffentlichen Broker testen

Kein Konto nötig: Verbinden Sie sich mit broker.connectmq.com auf Port 1883 und publizieren Sie in wenigen Sekunden.

Swift (CocoaMQTT)
import CocoaMQTT

let topic = "your-project/sensors/temperature" // Eindeutiges Topic-Präfix verwenden: Jeder kann den öffentlichen Broker mitlesen

// Mit dem kostenlosen öffentlichen Broker verbinden (kein Konto nötig) (Jeder Client braucht eine eindeutige Client-ID)
let mqtt = CocoaMQTT(clientID: "ios-" + UUID().uuidString, host: "broker.connectmq.com", port: 1883)
mqtt.keepAlive = 30

// Wird ausgeführt, sobald die Verbindung steht
mqtt.didConnectAck = { mqtt, _ in
    // Temperatur-Topic abonnieren
    mqtt.subscribe(topic, qos: .qos1)
    // Messwert als JSON publizieren
    mqtt.publish(topic, withString: #"{"temperature":21.5}"#, qos: .qos1)
}
// Wird für jede Nachricht auf einem abonnierten Topic ausgeführt
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" // Eindeutiges Topic-Präfix verwenden: Jeder kann den öffentlichen Broker mitlesen

    // Mit dem kostenlosen öffentlichen Broker verbinden (kein Konto nötig) (Jeder Client braucht eine eindeutige Client-ID)
    val client = Mqtt5Client.builder()
        .identifier("android-" + UUID.randomUUID())
        .serverHost("broker.connectmq.com")
        .serverPort(1883)
        .automaticReconnectWithDefaultConfig()
        .buildBlocking()
    client.connect()

    // Wird für jede Nachricht auf einem abonnierten Topic ausgeführt
    client.toAsync().publishes(MqttGlobalPublishFilter.ALL) { p ->
        println("${p.topic}: ${String(p.payloadAsBytes)}")
    }
    // Temperatur-Topic abonnieren
    client.subscribeWith().topicFilter(topic).qos(MqttQos.AT_LEAST_ONCE).send()
    // Messwert als JSON publizieren
    client.publishWith().topic(topic).qos(MqttQos.AT_LEAST_ONCE)
        .payload("""{"temperature":21.5}""".toByteArray()).send()
}

Kostenloser öffentlicher MQTT-Broker

Der öffentliche Broker wird gemeinsam genutzt: Jeder kann Ihre Topics abonnieren. Senden Sie darüber niemals Passwörter, personenbezogene Daten oder vertrauliche Informationen.

Mehr zum kostenlosen öffentlichen MQTT-Broker

2. Mit ConnectMQ in Produktion gehen

Nutzen Sie für echte Geräte statt des öffentlichen Brokers einen privaten Serverless-MQTT-Broker auf ConnectMQ: TLS-Verschlüsselung, Benutzername und Passwort für jedes Gerät sowie Zugriffskontrolle pro Topic, vollständig verwaltet. Starten Sie im Free-Plan — ohne Kreditkarte.

Ersetzen Sie YOUR_BROKER_HOST, YOUR_USERNAME und YOUR_PASSWORD durch die Werte aus Ihrem ConnectMQ-Dashboard.

Swift (CocoaMQTT)
import CocoaMQTT

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

// Mit Ihrem privaten ConnectMQ-Broker auf Port 8883 verbinden (Jeder Client braucht eine eindeutige Client-ID)
let mqtt = CocoaMQTT(clientID: "ios-" + UUID().uuidString, host: "YOUR_BROKER_HOST", port: 8883)
mqtt.keepAlive = 30
// Benutzername und Passwort aus Ihrem ConnectMQ-Dashboard
mqtt.username = "YOUR_USERNAME"
mqtt.password = "YOUR_PASSWORD"
// TLS: Der CA-Speicher des Systems prüft das Broker-Zertifikat
mqtt.enableSSL = true

// Wird ausgeführt, sobald die Verbindung steht
mqtt.didConnectAck = { mqtt, _ in
    // Temperatur-Topic abonnieren
    mqtt.subscribe(topic, qos: .qos1)
    // Messwert als JSON publizieren
    mqtt.publish(topic, withString: #"{"temperature":21.5}"#, qos: .qos1)
}
// Wird für jede Nachricht auf einem abonnierten Topic ausgeführt
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"

    // Mit Ihrem privaten ConnectMQ-Broker auf Port 8883 verbinden (Jeder Client braucht eine eindeutige Client-ID)
    val client = Mqtt5Client.builder()
        .identifier("android-" + UUID.randomUUID())
        .serverHost("YOUR_BROKER_HOST")
        .serverPort(8883)
        // TLS: Der CA-Speicher des Systems prüft das Broker-Zertifikat
        .sslWithDefaultConfig()
        // Benutzername und Passwort aus Ihrem ConnectMQ-Dashboard
        .simpleAuth().username("YOUR_USERNAME").password("YOUR_PASSWORD".toByteArray()).applySimpleAuth()
        .automaticReconnectWithDefaultConfig()
        .buildBlocking()
    client.connect()

    // Wird für jede Nachricht auf einem abonnierten Topic ausgeführt
    client.toAsync().publishes(MqttGlobalPublishFilter.ALL) { p ->
        println("${p.topic}: ${String(p.payloadAsBytes)}")
    }
    // Temperatur-Topic abonnieren
    client.subscribeWith().topicFilter(topic).qos(MqttQos.AT_LEAST_ONCE).send()
    // Messwert als JSON publizieren
    client.publishWith().topic(topic).qos(MqttQos.AT_LEAST_ONCE)
        .payload("""{"temperature":21.5}""".toByteArray()).send()
}

FAQ zu MQTT mit Swift / Kotlin

Wie verbinde ich Swift / Kotlin mit einem MQTT-Broker?

Installieren Sie CocoaMQTT (iOS) · HiveMQ MQTT Client (Android), verbinden Sie sich mit dem Broker-Host auf Port 1883 (oder 8883 mit TLS), abonnieren Sie dann ein Topic und publizieren Sie Nachrichten darauf. Die Beispiele auf dieser Seite verbinden sich mit dem kostenlosen öffentlichen Broker broker.connectmq.com und mit einem privaten ConnectMQ-Broker.

Gibt es einen kostenlosen MQTT-Broker zum Testen von Swift / Kotlin?

Ja. broker.connectmq.com ist ein kostenloser öffentlicher MQTT-Broker, für den Sie kein Konto benötigen. Jeder kann seine Topics mitlesen, nutzen Sie ihn daher nur für Tests und mit einem eindeutigen Topic-Präfix.

Wie sichere ich eine MQTT-Verbindung mit Swift / Kotlin ab?

Verbinden Sie sich über TLS auf Port 8883 mit Benutzername und Passwort aus Ihrem ConnectMQ-Dashboard und geben Sie jedem Gerät eigene Zugangsdaten und Topic-Berechtigungen, statt den öffentlichen Broker zu verwenden.

Kostenloser öffentlicher MQTT-Broker

Testen Sie jedes Beispiel auf broker.connectmq.com – ohne Registrierung, mit MQTT 3.1.1 und 5, TCP, TLS und WebSocket.

Mehr zum kostenlosen öffentlichen MQTT-Broker

Sicheres Serverless-MQTT für die Produktion

Wenn echte Geräte dazukommen, führen Sie denselben Code auf einem privaten, vollständig verwalteten ConnectMQ-Broker mit TLS und eigenen Zugangsdaten pro Gerät aus.

Kostenlos starten

Ihr privater MQTT-Broker ist nur wenige Klicks entfernt

Konto anlegen, Broker-Zugangsdaten erhalten und das erste Gerät verbinden — ohne Server, die installiert, gepatcht oder skaliert werden müssen.