如何在 Android 上通过 websocket 使用 HiveMQ

问题描述

我对 MQTT 比较陌生,正在尝试通过我的 Android 应用程序中的 websocket 进行连接。

HiveMQPaho 似乎是最常用的库,所以我现在就用它们试试运气。

不幸的是,我在第一个图书馆找到了正确的答案,需要一个关于如何继续的提示,因为不幸的是,文档没有对此进行任何说明。 使用 HiveMQ,我不太清楚如何通过 websocket 连接,以及如何自定义我的凭据/标头,因为我需要添加一些自定义标头,例如“x-amz-customauthorizer-name”等等。

这是我在不添加用户凭据的情况下的尝试:

val client = Mqtt3Client.builder()
    .identifier(UUID.randomUUID().toString())
    .serverAddress(InetSocketAddress(result.data.webSocketServer,443))
    .sslWithDefaultConfig()
    .addConnectedListener { context: MqttClientConnectedContext? -> Log.e(javaClass.simpleName,"mqtt Here Connected Yay") }
    .adddisconnectedListener { context: MqttClientdisconnectedContext -> Log.e(javaClass.simpleName,"mqtt disconnected: " + context.cause.message!!) }
    .buildAsync()

client.connect()

解决方法

您只需要将 webSocketConfig 添加到构建器中,如下所示:

        Mqtt3Client client = Mqtt3Client.builder()
            .identifier(UUID.randomUUID().toString())
            .serverAddress(new InetSocketAddress("localhost",443))
            .sslWithDefaultConfig()
this line-> .webSocketConfig(MqttWebSocketConfig.builder().subprotocol("mqtt").serverPath("/mqtt").build())
            .buildAsync();

但我认为您还不能添加自定义标题,请参阅 https://github.com/hivemq/hivemq-mqtt-client/issues/457

您好,

迈克尔