Skip to content

Quick Start

Get started with Pulse MQTT in minutes.

Basic Setup

1. Initialize

val pulseMqttKit = PulseMqttKit()
pulseMqttKit.initialize(context, bridge)

2. Implement Bridge

val bridge = object : PulseMqttKitBridge {
    override fun getLogger() = AndroidLogger()
    override fun getAppGson() = Gson()
    override fun getCustomCoroutineScope() = MainScope()
    override fun getHealthMonitoringConfig() = HealthMonitoringConfig(
        monitoringFreqSeconds = 30,
        type = HealthMonitoringType.WORK_MANAGER
    )
    override fun getNetworkConfig() = NetworkMonitoringConfig(enabled = true)
}

3. Register Listener

pulseMqttKit.addListener(object : MqttUpdatesListener {
    override fun onCommandSuccess(command: MqttCommand, result: CommandResult.Success) {
        // Handle success
    }

    override fun onCommandFailure(command: MqttCommand, result: CommandResult.Failure) {
        // Handle failure
    }

    override fun onMqttMessageReceived(topic: String?, payload: String?, topicMessage: TopicMessage<*>?) {
        // Handle incoming messages
    }
})

Connect to Broker

val connectCommand = ConnectCommand(
    connectionOptions = ConnectionOptions(
        serverUri = "tcp://broker.example.com:1883",
        clientId = "my-client",
        username = "user",
        password = "pass"
    ),
    retryPolicy = RetryPolicy.exponential(maxRetries = 3)
)
pulseMqttKit.submitCommand(connectCommand)

Subscribe to Topics

val subscribeCommand = SubscribeCommand(
    topicConfigs = hashMapOf(
        "sensor/data" to TopicTypeConfig(
            messageType = SensorData::class.java,
            qosLevel = QOSLevel.QOS_1
        )
    ),
    retryPolicy = RetryPolicy.exponential(maxRetries = 3)
)
pulseMqttKit.submitCommand(subscribeCommand)

Publish Messages

val message = ZMqttMessage(
    topic = "device/status",
    payload = """{"status": "online"}""",
    qos = QOSLevel.QOS_1,
    retained = false
)

val publishCommand = PublishCommand(
    message = message,
    retryPolicy = RetryPolicy.exponential(maxRetries = 3)
)
pulseMqttKit.submitCommand(publishCommand)

Disconnect

val disconnectCommand = DisconnectCommand(quiesceTimeout = 5000)
pulseMqttKit.submitCommand(disconnectCommand)

Complete Example

class MyApplication : Application() {
    private val pulseMqttKit = PulseMqttKit()

    override fun onCreate() {
        super.onCreate()
        setupMqtt()
    }

    private fun setupMqtt() {
        // Initialize
        pulseMqttKit.initialize(this, createBridge())
        pulseMqttKit.addListener(createListener())

        // Connect
        pulseMqttKit.submitCommand(
            ConnectCommand(
                connectionOptions = ConnectionOptions(
                    serverUri = "tcp://broker.example.com:1883",
                    clientId = "android-client"
                )
            )
        )

        // Subscribe
        pulseMqttKit.submitCommand(
            SubscribeCommand(
                topicConfigs = hashMapOf(
                    "sensor/data" to TopicTypeConfig(
                        messageType = SensorData::class.java,
                        qosLevel = QOSLevel.QOS_1
                    )
                )
            )
        )
    }
}

Next Steps