更新记录
v1.0.2023.07.18(2023-07-19)
1、修复iOS断开连接后重新连接数据接受不到的bug。 2、统一Android和iOS回调数据。
v1.0.2023.07.12(2023-07-14)
2023-07-12
修复iOS clientId未正确赋值造成的连接失败,增加iOS SSL连接逻辑。(待测试)
v1.0.2023.02.07(2023-02-08)
2022-02-07
增加hexStr字段处理16进制逻辑
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 12.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:11 - 16 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
前言(已支持iOS)
XM-Mqtt是一款在Android中使用tcp或者ssl/tls连接使用的原生插件,现已支持1、连接tcp或者ssl/tls地址。2、发送信息(字符串、16进制字符串)3、订阅消息等。需要帮助,请联系作者,QQ:1804945430(备注来源)。
使用说明
一、连接TCP
connectTCP() {
// 调用异步方法
mqttModule.connect({
serverURI: 'tcp://broker-cn.emqx.io:1883',
clientId: 'xxx@@@99999999',
hexStr: true, //为true返回十六进制字符串,为false返回utf-8字符串
connectOptions: {
userName: '',//admin(可空)
passWord: '',//xxxxx(可空)
cleanSession: true, //清除会话标志,默认true,该功能启用(false)会自动断线重连
automaticReconnect: true, //断开后,是否自动连接,默认false,不能
connectionTimeout: 30, //超时时间,单位s,默认值30s,最小10
keepAliveInterval: 60, //心跳时间,单位s。即多长时间确认一次Client端是否在线,默认值60,最小10
maxReconnectDelay: 10, //
mqttVersion: 4 //版本号,默认0
},
will: { //遗言
topic: 'topic',
payload: 'payload',
qos: 0, //默认为1,只能是0、1、2
retained: true //默认为falsess
}
}, (ret) => {
// 连接回调事件, msg区分类型
//onError 功能错误,不能继续运行
//onFailure 连接失败
//onSuccess 连接成功
//connectionLost 丢失连接
//connectionRefused 拒绝连接(iOS独有)
//connectionError 连接失败(iOS独有)
//protocolError mqttVersion错误(iOS独有)
//connectComplete 连接成功或者重新连接
console.log(ret);
modal.toast({
message: ret,
duration: 1.5
});
}, (data) => {
// 接收消息, msg区分类型
//messageArrived 收到消息
console.log(data);
modal.toast({
message: data,
duration: 1.5
});
});
}
二、连接SSL
var sslPath = plus.io.convertLocalFileSystemURL('/static/ssl/broker.emqx.io-ca.crt')
console.log('sslPath', sslPath)
mqttModule.connect({
serverURI: 'ssl://broker-cn.emqx.io:8883',
clientId: 'xxx@@@99999999',
hexStr: true, //为true返回十六进制字符串,为false返回utf-8字符串
connectOptions: {
userName: '',//admin(可空)
passWord: '',//xxxxx(可空)
cleanSession: true,//清除会话标志,默认true,该功能启用(false)会自动断线重连
automaticReconnect: true,//断开后,是否自动连接,默认false,不能
connectionTimeout: 30,//超时时间,单位s,默认值30s,最小10
keepAliveInterval: 20,//心跳时间,单位s。即多长时间确认一次Client端是否在线,默认值60,最小10
maxReconnectDelay: 10,
mqttVersion: 4,//版本号,默认0
//iOS SSL的使用参考博客:https://www.jianshu.com/p/4676834ac3c4
ssl: { //不需要可不填,或者直接删除该参数
caPath: sslPath, //单向认证仅需要填写该文件路径(Android和iOS共有)
crtPath: '', //单向认证填空值,双向认证必填(Android)
keyPath: '', //单向认证填空值,双向认证必填(Android)
password: '', //单向认证填空值,双向认证必填(Android和iOS共有)
p12Path: ''//单向认证填空值,双向认证必填(iOS)
}
},
will: { //遗言
topic: 'system',
payload: 'payload',
qos: 0, //默认为1,只能是0、1、2
retained: true //默认为falsess
}
},
(ret) => {
// 连接回调事件, msg区分类型
//onError 功能错误,不能继续运行
//onFailure 连接失败
//onSuccess 连接成功
//connectionLost 丢失连接
//connectionRefused 拒绝连接(iOS独有)
//connectionError 连接失败(iOS独有)
//protocolError mqttVersion错误(iOS独有)
//connectComplete 连接成功或者重新连接
console.log('连接结果', ret);
modal.toast({
message: ret,
duration: 1.5
});
},
(data) => {
// 接收消息, msg区分类型
//messageArrived 收到消息
console.log('接收到消息', data);
modal.toast({
message: data,
duration: 1.5
});
});
三、发布字符串
mqttModule.publishStr({
topic: 'KZJ_001',
payload: '测试测试',
qos: 1, //默认为1,只能是0、1、2
retained: true //默认为false
}, (ret) => {
console.log(ret);
modal.toast({
message: ret,
duration: 1.5
});
});
四、发布二进制
mqttModule.publishHex({
topic: 'KZJ_001',
payload: '00FFFE', //十六进制字符串,范例为[0x00, 0xFF, 0xFE]
qos: 1, //默认为1,只能是0、1、2
retained: true //默认为false
}, (ret) => {
console.log(ret);
modal.toast({
message: ret,
duration: 1.5
});
});
五、订阅消息
mqttModule.subscribe({
topic: 'system',
qos: 1
}, (ret) => {
console.log(ret);
modal.toast({
message: ret,
duration: 1.5
});
});
六、取消订阅
mqttModule.unsubscribe({
topic: 'KZJ_001'
}, (ret) => {
console.log(ret);
modal.toast({
message: ret,
duration: 1.5
});
});