更新记录
0.0.1(2026-04-27)
- 添加基础连接、订阅、发送、心跳、断开等 mqtt 功能
平台兼容性
uni-app x(5.01)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | 10.0 | × | × | × |
wicos-mqtt
wicos-mqtt 是一个面向 uni-app x 的 Android MQTT 原生插件,用 UTS 封装 MQTT/TCP 能力,对外提供面向 Broker 连接、主题订阅、消息发布和事件监听的统一调用方式。它主要服务于 MQTT 联调、设备上报、任务调度、心跳保活和状态回传等场景。
特性
- Android-only MQTT 原生能力封装。
- 支持 Broker 连接、断开、订阅、取消订阅、消息发布。
- 支持连接状态变化、消息到达、错误事件回调。
- 内置基础 keepalive 心跳,避免连接长时间空闲后被 Broker 主动断开。
- 对非 Android 平台提供统一的 fallback 错误返回。
目录结构
uni_modules/wicos-mqtt/
├── README.md
├── package.json
├── utssdk/
│ ├── index.uts
│ ├── interface.uts
│ └── app-android/
│ ├── index.uts
│ ├── AndroidManifest.xml
│ ├── config.json
│ └── mqtt/
│ ├── listener.uts
│ └── options.uts
└── js_sdk/
├── errors.ts
├── event-emitter.ts
├── index.ts
└── types.ts
文件职责
utssdk/index.uts:插件根入口,对外导出统一 API;非 Android 平台在这里返回 fallback 错误。utssdk/app-android/index.uts:Android 平台主入口,负责 MQTT 报文收发、连接状态切换和 keepalive。utssdk/app-android/mqtt/listener.uts:消息、状态、错误监听器注册表,以及事件对象构造。utssdk/app-android/mqtt/options.uts:Broker URL 组装、默认 clientId、keepalive、QoS 等参数解析。utssdk/interface.uts:连接参数、事件结构和客户端接口声明。js_sdk/:可选的 JS/TS 门面层,当前项目页面未直接依赖。package.json:uni_modules插件元数据。
平台支持
- 当前仅支持
APP-ANDROID。 - 其他平台会返回
wicos-mqtt 当前仅支持 Android 宿主环境。
安装方式
通常将整个 wicos-mqtt 目录放入项目的 uni_modules 下即可。发布时请确保插件根目录下存在 utssdk/,页面侧通过下面的方式导入:
import { createNativeMqttClient } from "@/uni_modules/wicos-mqtt"
如果需要显式引用类型,可再按需引入:
import type {
ConnectOptions,
NativeMqttClient,
MqttMessageEvent
} from "@/uni_modules/wicos-mqtt/utssdk/interface.uts"
调用流程
推荐按下面的顺序调用插件接口:
1. 创建客户端
先通过 createNativeMqttClient 创建客户端实例,再统一注册消息、状态和错误监听器。
const client = createNativeMqttClient()
2. 注册事件监听
连接前建议先注册:
addStateChangeListeneraddMessageListeneraddErrorListener
这样连接中的状态变化、Broker 推送消息和底层错误都不会漏掉。
3. 建立 Broker 连接
准备好 host / port / clientId / username / password / ssl 等参数后,调用 connect 建立连接。
await client.connect({
host: "192.168.0.10",
port: 1883,
clientId: "task-broker-mobile",
clean: true,
keepAliveSeconds: 60,
connectTimeoutMs: 10000,
autoReconnect: true,
ssl: false
})
4. 订阅目标主题
连接成功后,再调用 subscribe 订阅业务主题,例如任务下行主题、设备控制主题或广播状态主题。
5. 发布消息
当需要上报任务执行状态、设备心跳或业务响应时,调用 publish 向指定主题发送消息。
6. 处理消息与错误
Broker 推送消息通过 addMessageListener 接收;连接异常、鉴权失败、网络中断、心跳失败等都通过 addErrorListener 接收。
7. 断开与清理
页面退出或不再需要连接时,调用 disconnect,并按需移除对应监听器。
API 概览
1. createNativeMqttClient()
创建一个原生 MQTT 客户端实例。
- 无参数。
- 返回值:
NativeMqttClient
注意事项:
- 当前仅在 Android 宿主环境下可正常工作。
- 非 Android 平台会返回 fallback 客户端,调用连接或发布能力会直接失败。
2. connect(options)
连接到指定 Broker。
options: ConnectOptions
参数字段:
host: string:Broker 地址。port: number:Broker 端口。clientId?: string | null:客户端标识。username?: string | null:用户名。password?: string | null:密码。clean?: boolean | null:是否启用 clean session。keepAliveSeconds?: number | null:keepalive 秒数。connectTimeoutMs?: number | null:连接超时时间,单位毫秒。reconnectIntervalMs?: number | null:重连间隔,当前仅作配置保留。autoReconnect?: boolean | null:是否启用自动重连状态标记。protocolVersion?: number | null:协议版本,当前默认 MQTT 3.1.1。ssl?: boolean | null:是否使用 SSL。
返回值:
Promise<void>
注意事项:
- 如果 Broker 返回 CONNACK 拒绝码,错误事件里会带上对应可读说明。
- 如果连接失败,错误事件会带上 broker URL、SSL 开关、超时信息和底层
cause。 - 当前实现基于原生 MQTT/TCP,不使用 WebSocket。
3. disconnect()
主动断开当前 Broker 连接。
- 无参数。
- 返回值:
Promise<void>
注意事项:
- 调用后会停止 keepalive 心跳。
- 断开成功后会触发状态变更到
disconnected。
4. subscribe(topic, options?)
订阅指定主题。
topic: string:目标主题。options?: SubscribeOptions | null
可选字段:
qos?: number | null
返回值:
Promise<void>
注意事项:
- 当前默认使用 QoS 0。
- 调用前必须已连接到 Broker,否则会返回
MQTT client 未连接。
5. unsubscribe(topic)
取消订阅指定主题。
topic: string- 返回值:
Promise<void>
注意事项:
- 调用前必须已连接到 Broker。
- 当前实现基于 UNSUBSCRIBE 报文直接发送,不依赖额外确认回调。
6. publish(topic, payload, options?)
向指定主题发布消息。
topic: stringpayload: stringoptions?: PublishOptions | null
可选字段:
qos?: number | nullretain?: boolean | null
返回值:
Promise<void>
注意事项:
- 当前默认 QoS 0。
- 如果选择 QoS 1,客户端会在收到下行 QoS 1 消息时回发
PUBACK。 payload当前按 UTF-8 字符串编码发送。
7. getState()
获取当前连接状态。
- 无参数。
- 返回值:
MqttConnectionState
可选状态值:
"idle""connecting""connected""reconnecting""disconnected""error"
8. addMessageListener(listener)
注册消息到达监听器。
listener: (event: MqttMessageEvent) => void- 返回值:
number,监听器 ID
消息事件字段:
topic: stringpayload: stringqos: numberretained: booleanduplicate: booleantimestamp: number
9. removeMessageListener(listenerId)
移除消息监听器。
listenerId: number- 无返回值。
10. addStateChangeListener(listener)
注册连接状态变化监听器。
listener: (event: MqttStateChangeEvent) => void- 返回值:
number
状态事件字段:
state: MqttConnectionStatereason?: string | nulltimestamp: number
11. removeStateChangeListener(listenerId)
移除状态监听器。
listenerId: number- 无返回值。
12. addErrorListener(listener)
注册错误监听器。
listener: (event: MqttErrorEvent) => void- 返回值:
number
错误事件字段:
code: stringmessage: stringcause?: string | nulltimestamp: number
13. removeErrorListener(listenerId)
移除错误监听器。
listenerId: number- 无返回值。
事件回调
addMessageListener
收到 Broker 下行消息时触发,返回结构:
{
topic: string
payload: string
qos: number
retained: boolean
duplicate: boolean
timestamp: number
}
addStateChangeListener
连接状态变化时触发:
{
state: "idle" | "connecting" | "connected" | "reconnecting" | "disconnected" | "error"
reason?: string | null
timestamp: number
}
addErrorListener
发生连接、订阅、发布、断线或 keepalive 异常时触发:
{
code: string
message: string
cause?: string | null
timestamp: number
}
常见错误码
插件通过 MqttErrorEvent 对外返回错误信息。常见错误码如下:
| 错误码 | 含义 |
|---|---|
CONNECT_FAILED |
Broker 建连失败 |
DISCONNECT_FAILED |
主动断开失败 |
SUBSCRIBE_FAILED |
主题订阅失败 |
UNSUBSCRIBE_FAILED |
取消订阅失败 |
PUBLISH_FAILED |
消息发布失败 |
CONNECTION_LOST |
已建立连接后底层连接中断 |
KEEPALIVE_FAILED |
心跳发送失败 |
keepalive 说明
当前实现已经内置基础 keepalive:
- 连接成功后,会按
keepAliveSeconds / 2周期发送PINGREQ - 收到
PINGRESP后静默确认 - 如果心跳发送失败,会抛出
KEEPALIVE_FAILED
这能避免连接空闲一段时间后被 Broker 主动断开。
实现说明
这个插件的结构已经按项目内 wicos-ble 的 UTS 插件方式对齐:
utssdk/index.uts只保留跨平台导出和非 Android fallback。utssdk/app-android/index.uts负责 Android 平台 MQTT 主逻辑。utssdk/app-android/mqtt/listener.uts专门处理事件监听器注册表。utssdk/app-android/mqtt/options.uts专门处理参数与默认值解析。
这样做的目标是把平台边界和 MQTT 协议处理边界拆开,降低后续维护成本,也更贴近 uni-app x UTS 插件的推荐结构。
使用建议
- 只在 Android 端调用这个插件。
- 页面层优先依赖
@/uni_modules/wicos-mqtt,不要直接耦合 Android SDK 类。 - 连接前先注册状态、消息、错误监听器。
- 如果在手机上联调本机电脑 Broker,不要填写
127.0.0.1,要改成电脑在局域网中的实际 IP。 - 如果 Broker 使用 TLS,请同步打开
ssl开关并核对端口。
常见问题
1. 连接失败
- 确认
host和port正确。 - 确认手机与 Broker 所在设备在同一网络可达范围内。
- 确认 Broker 已启动并监听对应端口。
- 确认 SSL 开关和 Broker 实际端口匹配。
2. 连接一段时间后断开
- 确认 Broker 是否允许长连接空闲。
- 检查错误日志里是否出现
KEEPALIVE_FAILED。 - 检查移动网络切换、Wi-Fi 休眠或宿主进程被系统限制的情况。
3. 订阅成功但没有消息
- 确认主题名称完全一致。
- 确认发布端的 QoS、retain 和业务路由配置正确。
- 确认消息确实发到了当前客户端订阅的主题。
4. 发布失败
- 确认当前状态已经是
connected。 - 确认 Broker 没有限制当前客户端的发布权限。
- 检查错误事件中的
cause,区分是底层 I/O 失败还是连接已经丢失。
关联页面
项目中可直接调用这个插件的页面是:
pages/MQTT/index.uvue
该页面提供了 Broker 连接、任务主题订阅、单次发送、定时发送和日志抽屉展示的完整调试入口。
版本说明
- 当前版本:
0.0.1 - 插件 ID:
wicos-mqtt

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 1
赞赏 0
下载 11704638
赞赏 1911
赞赏
京公网安备:11010802035340号