更新记录

1.5.7(2026-09-07)

  • 优化 uni-app x:入口将对象字面量归一化为 Option,业务页可直接传对象调用 API,无需再写 as XxxOption
  • 使用须制作自定义基座,并走云端传统打包(不支持离线打包、安心打包)
  • 不传参行为与上一版兼容

1.5.6(2026-09-06)

  • 修复 Android ByteArray 空判断:size 先 Number.from
  • 修复 Android 运行时 ClassCastException:成功回调与 onMessage 结果改为 UTSJSONObject 别名,避免强转为独立 Result 类型
  • 修复 onMessage 载荷构造统一为 UTSJSONObject;Android QoS 用 Number.from
  • 修复 invoke 回调判空调用;可选 number 去掉 undefined 联合;部分 Android 原生返回值改 Number.from、可变属性局部拷贝
  • 使用须制作自定义基座,并走云端传统打包(不支持离线打包、安心打包)
  • 【务必使用此版本及以上版本打包使用,低版本存在缺陷】

1.5.4(2026-09-04)

  • 修复 Android 云打包:可选 number 先 Number.from 再比较返回,避免 compareTo / expected Number actual Any
  • 使用须制作自定义基座,并走云端传统打包(不支持离线打包、安心打包)
  • 不传参行为与上一版兼容
  • 【务必使用此版本及以上版本打包使用,低版本存在缺陷】
查看更多

平台兼容性

uni-app(4.11)

Vue2 Vue3 Vue3插件版本 Chrome Chrome插件版本 Safari Safari插件版本 app-vue app-vue插件版本 app-nvue app-nvue插件版本 Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本
× 1.5.6 80 1.5.6 14.0 1.5.6 1.5.6 1.5.6 5.0 1.5.6 12 1.5.6 12 1.5.6
微信小程序 微信小程序插件版本 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
2.10.0 1.5.6 × × × × × × × × - × ×

uni-app x(4.11)

Chrome Chrome插件版本 Safari Safari插件版本 Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本 微信小程序 微信小程序插件版本
80 1.5.6 14.0 1.5.6 5.0 1.5.6 12 1.5.6 12 1.5.6 2.10.0 1.5.6

breao-emqxmqtt 使用说明

标准 MQTT 3.1.1 客户端,兼容 EMQX 等 Broker,适用于设备上下行、状态同步与消息推送场景。

当前版本:1.5.7

  • Android / iOS:原生 TCP 或 SSL
  • 微信小程序 / 鸿蒙 / H5:MQTT over WebSocket(ws / wss
  • 能力:连接、订阅、发布、遗嘱、指数退避重连与次数上限;QoS 0/1/2、retain、账号密码、cleanSession;payload 支持文本与二进制;发布队列背压
  • 不做 EMQX 服务端、不做 MQTT 5 全家桶、不做其它小程序

建议调用顺序:initconnectsubscribe / publishunsubscribedisconnect / destroy。各异步方法均支持 success / fail / completefailerrCode / errMsg(中文)。


1. 环境要求

  • HBuilderX 4.11 及以上(鸿蒙 UTS 建议 4.81+)
  • uni-app Vue3(App-vue / App-nvue)或 uni-app x(App;微信 / H5 能力与 uni-app 一致)
  • 支持:App-Android、App-iOS、App-鸿蒙、微信小程序、H5(Chrome / Safari);uni-app x 含鸿蒙与 H5
  • 不支持:其它小程序
  • Android 最低 API:21;iOS 最低 12;鸿蒙最低 API:12;微信小程序基础库建议 2.10.0 及以上
  • App 真机调试须制作自定义基座;正式发版须购买授权后走云端传统打包
  • 授权绑定唯一 appid + 包名

2. 安装与引入

将插件目录放入工程的 uni_modules/breao-emqxmqtt,或从插件市场导入后同步。

import {
  init,
  connect,
  disconnect,
  destroy,
  subscribe,
  unsubscribe,
  publish,
  getConnectionState,
} from '@/uni_modules/breao-emqxmqtt'

3. API

3.1 init / destroy

init({
  host: 'broker.emqx.io',
  port: 1883,
  clientId: 'uni-app-demo',
  autoReconnect: true,
  maxReconnectAttempts: 5,
  maxPublishQueue: 32,
  will: {
    topic: 'device/status',
    payload: 'offline',
    qos: 0,
    retain: false,
  },
  onMessage(msg) {
    // msg: { topic, payload, payloadBytes, encoding, qos, retain }
    console.log(msg.topic, msg.encoding, msg.payload)
  },
  onConnectionLost(res) {
    console.log('lost', res)
  },
  success() {},
  fail(err) {
    console.error(err.errCode, err.errMsg)
  },
})

destroy({ success() {}, fail() {} })

destroy 会断开连接并清空 onMessage / onConnectionLost。App 忽略 wsPath / mapTcpPortToWs。微信 / 鸿蒙 / H5 请用 WS 口(常用 8083 / 8084)或保留默认端口映射。

3.2 connect / disconnect / 状态

connect({
  timeout: 15000,
  success() {},
  fail(err) { console.error(err.errCode, err.errMsg) },
})

getConnectionState({
  success(res) {
    // res.state: idle | connecting | connected | disconnected
  },
})

disconnect({ success() {}, fail() {} })

3.3 subscribe / unsubscribe / publish

subscribe({ topic: 'test/uni', qos: 1, success() {}, fail() {} })

publish({
  topic: 'test/uni',
  payload: 'hello',
  qos: 0,
  retain: false,
  success() {},
  fail(err) { console.error(err.errCode, err.errMsg) },
})

// 二进制
publish({
  topic: 'test/bin',
  payload: new Uint8Array([0x01, 0x02, 0xff]).buffer,
  qos: 2,
  success() {},
})

unsubscribe({ topic: 'test/uni', success() {} })

微信 / 鸿蒙 / H5 订阅与 QoS>0 发布会等待 Broker 应答(SUBACK / PUBACK / PUBREC·PUBREL·PUBCOMP)。

3.4 二进制约定

  • 发布 / 遗嘱payload 可为 string(按 UTF-8 编码)或 ArrayBuffer(原样发送)
  • 接收:始终带回 payloadBytesArrayBuffer)与 encoding
    • encoding === 'utf8'payload 为可靠 UTF-8 文本
    • encoding === 'binary':请使用 payloadBytespayload 仅为尽力解码视图

4. 可配置项

字段 位置 默认 说明
host init 必填 Broker 主机或 IP
port init 随端与 TLS TCP 常用 1883/8883;WS 常用 8083/8084
clientId init 插件生成 生产建议自行指定唯一 ID
username init 可选鉴权用户名
password init 可选鉴权密码
useTls init false App 为 TLS;WS 端为 WSS
cleanSession init true MQTT clean session
keepAlive init 60 心跳间隔,单位秒
will init { topic, payload, qos?, retain? };不传不设遗嘱
autoReconnect init false 断线后插件侧重连
reconnectInterval init 3000 重连基础间隔毫秒;实际按指数退避,上限 60000
maxReconnectAttempts init 0 最大重连次数;0 表示不限制
maxPublishQueue init 32 QoS>0 在途发布上限;满则发布失败
mapTcpPortToWs init true 仅 WS 端:1883→8083、8883→8084
wsPath init /mqtt 仅 WS 端路径;App 忽略
debug init false 调试日志
onMessage init 收到消息回调
onConnectionLost init 被动断线回调
timeout connect 15000 建连超时毫秒
topic subscribe / unsubscribe / publish / will 必填 MQTT 主题
payload publish / will 必填 字符串或 ArrayBuffer
qos subscribe / publish / will 0 支持 0 / 1 / 2
retain publish / will false 是否保留消息

不传参即用默认值。


5. 完整示例

5.1 App(TCP / SSL)

import {
  init, connect, subscribe, publish, unsubscribe, disconnect, destroy,
} from '@/uni_modules/breao-emqxmqtt'

init({
  host: 'broker.emqx.io',
  port: 1883,
  keepAlive: 60,
  autoReconnect: true,
  maxReconnectAttempts: 5,
  onMessage(msg) {
    if (msg.encoding === 'binary') {
      console.log(msg.topic, Array.from(new Uint8Array(msg.payloadBytes)))
    } else {
      console.log(msg.topic, msg.payload)
    }
  },
  success() {
    connect({
      success() {
        subscribe({
          topic: 'test/uni',
          qos: 1,
          success() {
            publish({
              topic: 'test/uni',
              payload: 'hello',
              qos: 1,
              retain: true,
              success() {
                unsubscribe({ topic: 'test/uni', success() { disconnect({ success() { destroy({}) } }) } })
              },
            })
          },
        })
      },
    })
  },
  fail(err) { console.error(err.errCode, err.errMsg) },
})

5.2 微信小程序 / 鸿蒙 / H5(WebSocket)

import { init, connect, subscribe, publish } from '@/uni_modules/breao-emqxmqtt'

init({
  host: 'broker.emqx.io',
  port: 8083,
  useTls: false,
  wsPath: '/mqtt',
  will: { topic: 'test/will', payload: 'offline', qos: 0, retain: false },
  onMessage(msg) { console.log(msg.topic, msg.encoding, msg.payload) },
  success() {
    connect({
      success() {
        subscribe({ topic: 'test/uni', qos: 1 })
        publish({ topic: 'test/uni', payload: 'hello', qos: 0 })
        publish({
          topic: 'test/bin',
          payload: new Uint8Array([0xaa, 0x55]).buffer,
          qos: 2,
        })
      },
    })
  },
})

微信正式环境须 useTls: true(wss),并在小程序后台配置 socket 合法域名;H5 正式环境建议 wss;Broker 须开启 MQTT over WebSocket。


6. 权限

请在应用 manifest / 隐私弹窗中按需声明,并说明用于连接 MQTT Broker 收发业务报文。

平台 权限 说明
Android android.permission.INTERNET 访问网络连接 Broker
Android android.permission.ACCESS_NETWORK_STATE 检测网络状态
iOS NSLocalNetworkUsageDescription 访问局域网 Broker 时说明用途
iOS NSBonjourServices(_mqtt._tcp) Bonjour 服务发现(若使用)
鸿蒙 ohos.permission.INTERNET 访问网络连接 Broker
微信 uni.connectSocket / SocketTask WebSocket;子协议 mqtt;正式环境须 wss + socket 合法域名
H5 浏览器 WebSocket 子协议 mqtt;正式环境建议 wss

7. 错误码(904)

含义
9040001 成功
9040002 失败
9040003 SDK 未配置
9040004 未连接
9040005 参数非法
9040006 连接失败
9040007 平台不支持
9040008 订阅失败
9040009 发布失败
9040010 能力未实现

8. 平台注意

  • uni-app x(.uvue):1.5.7 起可直接传对象字面量调用 API,无需 as XxxOption;须使用 1.5.7+ 并重打自定义基座
  • App 为 TCP/SSL;微信 / 鸿蒙 / H5 为 WS/WSS,端口与路径勿混用
  • 若 WS 端仍传 1883/8883,默认映射为 8083/8084;可用 mapTcpPortToWs: false 关闭
  • Android TLS 使用系统默认信任库;自签证书需业务侧另行处理
  • QoS 支持 0 / 1 / 2;不支持 MQTT 5
  • 重连为指数退避(基础间隔 × 2^n,上限 60s);maxReconnectAttempts 为 0 时不限制次数
  • maxPublishQueue 仅约束 QoS>0 在途发布;满则返回发布失败
  • 二进制消息请以 payloadBytes 为准;勿对 encoding === 'binary'payload 做业务解析

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android: android.permission.INTERNET、android.permission.ACCESS_NETWORK_STATE。 iOS: NSLocalNetworkUsageDescription(局域网 Broker); NSBonjourServices(_mqtt._tcp,本地网络服务发现)。 鸿蒙: ohos.permission.INTERNET。 微信小程序: 网络 socket(uni.connectSocket / SocketTask;正式环境须 wss,并配置 socket 合法域名;子协议 mqtt)。 H5: 浏览器 WebSocket(正式环境建议 wss)。 用途:MQTT 连接、订阅与发布。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

不采集、不上传任何数据;MQTT 报文仅在本机与用户配置的 Broker 之间传输

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。