更新记录

1.1.0(2024-01-17)

新增函数setQos、publishQos,publishQos函数设置的qos参数优先级高于setQos函数设置的qos

1.0.9(2023-08-28)

处理电视端使用报空指针异常的问题

1.0.8(2023-08-09)

1、增加是否持久会话设置 2、增加连接超时时间设置 3、增加心跳时间设置 4、code为-3时增加reason参数返回

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 12.0 armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 ×

原生插件通用使用流程:

  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原生插件配置”->”云端插件“列表中删除该插件重新选择


安卓MQTT连接原生插件,支持 tcp/ws/wss 协议

  • 支持Android平台使用,支持 tcp/ws/wss 协议
    1. 函数说明
序号 函数名称 函数说明
1 addCallback(function callback) 插件提供的结果回调函数,参数为接收结果的回调函数
2 enabledDebug(boolean enabled) 是否开启插件日志输出,默认false,插件输出的日志请使用Androidstudio查看
3 setAutoReconnect(boolean autoReconnect) 设置掉线是否自动重连,默认为true
4 setCleanSession(boolean isCleanSession) 设置是否持久会话 默认true
5 setConnectionTimeout(int connectionTimeout) 设置连接超时时间 默认20s
6 setKeepAliveInterval(int keepAliveInterval) 设置心跳时间 默认10s
7 setQos(int qos) 设置QOS,如果调用的是publishQos函数,则qos以publishQos函数优先
8 connectUseJson(String json) 连接mqtt,参数为包含有连接参数的json字符串,详细说明见下方
9 connect(String sever, String name, String password, String clientId) 连接mqtt,详细说明见下方
10 disconnect() 断开连接
11 isConnected(function callback) mqtt是否已连接,回调函数返回true和false
12 subscribe(String topic) 订阅主题,在连接成功之后调用
13 unsubscribe(String topic) 取消订阅主题,在连接成功之后调用
14 publish(String msg, String topic) 发送消息,在连接成功之后调用
15 publishQos(String msg, String topic,int qos) 发送消息,在连接成功之后调用,该函数qos参数优先级高于setQos函数设置的qos
16 reconnectMqtt() 重连mqtt,调用setAutoReconnect函数设置为false时,mqtt掉线后需自己手动重连
  • addCallback(function callback)函数回调结果说明,返回结果中code值见下方code值说明

    该函数回调结果示例如下
    {"code":0,"msg":"mqtt连接成功"}
    
    {"code":3,"msg":"主题订阅成功:testtopic\/1","data":{"topic":"testtopic\/1"}}
    
    {"code":2,"msg":"MQTT 收到消息!","data":{"topic":"testtopic\/1","message":"qqqqqqss"}}
    
    {"code":1,"msg":"MQTT 发送消息成功\/完成","data":{"topic":"testtopic\/1","message":"\"ttuuuy\""}}
  • connectUseJson(String json)函数参数说明

    参数示例如下
    {
    sever: "", //服务地址 示例:wss://ip:port
    userName: "", //用户名
    password: "", //密码
    clientId: "", //客户端id
    autoReconnect: true, //是否自动重连,默认是true,也可以使用setAutoReconnect(true/false)函数设置
    isCleanSession:true,//是否持久会话,默认为true
    connectionTimeout:20,//连接超时时间 默认20s 
    keepAliveInterval:10 //心跳时间 默认10s 
    }
  • connect(String sever, String name, String password, String clientId)函数参数说明

    参数说明:
    1、server : mqtt服务地址 示例:wss://ip:port
    2、name : 用户名
    3、password : 密码
    4、clientId : 客户端id
  • code 值说明

    序号 code值 说明
    1 4 取消主题订阅成功
    2 3 主题订阅成功
    3 2 MQTT 收到消息
    4 1 MQTT 发送消息成功/完成
    5 0 MQTT连接成功
    6 -1 MQTT连接失败,即MQTT连接库使用连接参数连接时失败;请检查连接参数(服务地址、用户名等)是否正确
    7 -2 MQTT已断开连接(手动断开),即调用disconnect()函数
    8 -3 MQTT 连接掉线,开始自动重连,即设置掉线自动重连为true时,默认掉线自动重连为true
    9 -4 MQTT 连接掉线,需手动重连,即设置掉线自动重连为false时,默认掉线自动重连为true
    10 -5 订阅主题失败,MQTT未连接
    11 -6 消息发布失败,MQTT未连接
    12 -7 消息发布失败,详细错误信息请查看addCallback(function callback)的回调结果
    13 -8 主题订阅失败,详细错误信息请查看addCallback(function callback)的回调结果
    14 -9 连接出错,连接参数不可为空,请检查连接参数是否完整
    15 -10 取消订阅失败
  • 使用示例

    <template>
        <view class="uni-column">
            <view class="uni-row top-view">
                <view class="uni-row" style="width: 60%;justify-content: center;">
                    <text :style="{color:stateColor}">{{state}}</text>
                </view>
                <view class="uni-row connect-btn" @click="clickConnectOrNot()">
                    <text>{{connectText}}</text>
                </view>
            </view>
            <view class="uni-row" style="justify-content: space-between;margin-top: 10rpx;">
                <text style="padding: 10rpx;" @click="toUnsubscribe()">取消订阅</text>
                <text style="padding: 10rpx;" @click="toSubscribe()">订阅</text>
            </view>
    
            <view class="uni-column" style="padding: 20rpx;">
                <view class="uni-column" v-for="(item,index) in list">
                    <view class="uni-row" style="margin: 10rpx;" v-show="item.gravity=='left'">
                        <text>{{item.content}}</text>
                    </view>
                    <view class="uni-row" style="width: 100%;margin: 10rpx;" v-show="item.gravity=='right'">
                        <text style="width: 100%;text-align: end;">{{item.content}}</text>
                    </view>
                </view>
            </view>
    
            <view class="" style="height: 100rpx;"></view>
            <view class="uni-row bottom-view">
                <view class="uni-row bottom-sub-view">
                    <view class="uni-row">
                        <input class="input" placeholder-class="p-class" v-model="inputValue" type="text" placeholder="请输入">
                    </view>
                    <view class="uni-row send-btn" @click="clickSend()">
                        <text>发送</text>
                    </view>
                </view>
            </view>
        </view>
    </template>
    
    <script>
        const mqttModule = uni.requireNativePlugin("jushi-MqttPlugin")
        export default {
            data() {
                return {
                    list: [],
                    sendMsg: [],
                    state: 'mqtt未连接',
                    connectText: '开始连接',
                    stateColor: "#666666",
                    inputValue: ''
                }
            },
            created() {
                this.mqttCallback()
                mqttModule.enabledDebug(true)//开启日志输出,需要用Android studio才能查看插件日志
            },
            beforeDestroy() {
                mqttModule.disconnect()
            },
            methods: {
                mqttCallback() { //mqtt回调监听
                    mqttModule.addCallback(res => {
                        console.log("回调结果:" + res)
                        var json = JSON.parse(res)
                        switch (parseInt(json.code)) {
                            case 0: //mqtt连接成功
                                this.toSubscribe()
                                this.state = "mqtt已连接"
                                this.stateColor = "#008577"
                                this.connectText = "断开连接"
                                break
                            case -2: //手动断开连接
                                this.state = "mqtt未连接"
                                this.stateColor = "#666666"
                                this.connectText = "开始连接"
                                break
                            case 2: //收到消息(对方发的和自己发的都会走到这里)
                                this.handleMsg(json)
                                break
                        }
                    })
                },
                handleMsg(json){//处理收到的消息(对方发的和自己发的都会走到这里)
                    var isSend = false
                    for (var i = 0; i < this.sendMsg.length; i++) {
                        if (this.sendMsg[i] == json.data.message) {
                            isSend = true
                            break
                        }
                    }
                    var data = {
                        content: `Topic:${json.data.topic}\n ${json.data.message}`,
                        gravity: isSend ? "right" : "left"
                    }
                    this.list.push(data)
                },
                clickConnectOrNot() {
                    mqttModule.isConnected(res => {
                        console.log("mqtt是否已连接:" + res)
                        if (res) {
                            mqttModule.disconnect()
                        } else {
                            var sever = "wss://xxx.xx.mqtt.chat:443";
                            //String sever = "ws://xxx.xxx.mqtt.chat:80";
                            var userName = "3363856563";
                            var psw ="xxxxx";
                            var clientId = "123@jk1bh0";
                            // mqttModule.connect(sever, userName, psw, clientId) //mqtt连接方法1
                            this.connectMqtt(sever,userName,psw,clientId)//mqtt连接方法2
                        }
                    })
                },
                connectMqtt(sever, userName, psw, clientId) {
                    mqttModule.connectUseJson({
                        sever: sever, //服务地址 示例:wss://ip:port
                        userName: userName, //用户名
                        password: psw, //密码
                        clientId: clientId, //客户端id
                        autoReconnect: true, //是否自动重连,默认是true,也可以使用setAutoReconnect(true/false)函数设置
                        isCleanSession:true,//是否持久会话,默认为true
                        connectionTimeout:20,//连接超时时间 默认20s 
                        keepAliveInterval:10 //心跳时间 默认10s 
                    })
                },
                toSubscribe() { //连接成功,订阅主题
                    mqttModule.subscribe("testtopic/1")
                },
                toUnsubscribe(){//取消订阅
                    mqttModule.unsubscribe("testtopic/1")
                },
                clickSend() { //点击发送
                    mqttModule.isConnected(res => {
                        if (!res) {
                            this.toast("MQTT未连接")
                            return
                        }
                        var msg = JSON.stringify(this.inputValue)
                        this.sendMsg.push(msg)
                        mqttModule.publish(msg, "testtopic/1")
                        this.inputValue = ''
                    })
                },
                toast(msg) {
                    uni.showToast({
                        icon: "none",
                        title: msg
                    })
                }
            }
        }
    </script>
    
    <style>
        .uni-column {
            display: flex;
            flex-direction: column;
        }
    
        .uni-row {
            display: flex;
            flex-direction: row;
        }
    
        .bottom-view {
            position: fixed;
            bottom: 0;
            width: 100%;
        }
    
        .input {
            width: 550rpx;
            font-size: 30rpx;
            padding: 10rpx;
        }
    
        .p-class {
            font-size: 30rpx;
            color: #aaaaaa;
        }
    
        .bottom-sub-view {
            width: 100%;
            padding: 20rpx;
            background-color: #ffffff;
            justify-content: space-between;
            align-items: center;
        }
    
        .send-btn {
            color: black;
            border-radius: 10rpx;
            border: 1rpx solid #aaaaaa;
            font-size: 30rpx;
            padding: 5rpx 20rpx 5rpx 20rpx;
        }
    
        .top-view {
            padding: 10rpx;
            justify-content: space-between;
        }
    
        .connect-btn {
            width: 20%;
            justify-content: center;
            border-radius: 10rpx;
            border: 1rpx solid #aaaaaa;
            font-size: 30rpx;
            padding: 5rpx 20rpx 5rpx 20rpx;
        }
    </style>
  • 示例应用下载

    扫码下载体验

    其它插件

    安卓原生插件

  • 文件在线预览

  • 银联支付线上收银台(通用版) 封装

  • 阿里云RTC音视频通话

  • 权限请求

  • 文字转语音

  • MQTT连接

  • 获取手机通讯录联系人

  • 快捷工具悬浮窗

  • 日历日程事件

  • 获取本地音频文件信息

  • 根据经纬度获取位置信息

  • WebSocket连接

  • 高德地图封装安卓原生地图扩展组件

  • 使用ECharts封装的安卓原生扩展组件

  • 给图片添加水印

  • 自定义通知栏通知

    UTS插件

  • 安卓权限请求UTS插件

  • 安卓文字转语音UTS插件

  • 安卓获取音频文件UTS插件

    前端插件

  • ECharts封装全端通用组件

  • 图片添加水印,支持微信小程序、H5

  • 手写签名、电子签名组件

隐私、权限声明

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

<uses-permission android:name="android.permission.INTERNET" />

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

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

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