更新记录

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

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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
        });
    });

支持定制,联系QQ:1804945430,微信:18980392735 请备注来源

隐私、权限声明

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

联网

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

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

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问