会飞的小白鼠
会飞的小白鼠
  • 发布:2019-08-24 17:09
  • 更新:2023-07-25 17:55
  • 阅读:9523

uni-app中使用阿里云MQTT,Dome分享,仅限APP端

分类:uni-app

var $mqtt = require("@/common/js/mqttws31.js");
var $crypto = require("@/common/js/crypto-js.js");
var instanceId = 'xxxxxxxxxx'; //实例 ID,购买后从控制台获取
var host = 'xxxxxxxxxx.mqtt.aliyuncs.com'; // 设置当前用户的接入点域名,接入点获取方法请参考接入准备章节文档,先在控制台创建实例
var port = 80; //WebSocket 协议服务端口,如果是走 HTTPS,设置443端口
var topic = 'Topic_xxxxxxxxxx'; //需要操作的 Topic,第一级父级 topic 需要在控制台申请
var useTLS = false; //是否走加密 HTTPS,如果走 HTTPS,设置为 true
var accessKey = 'xxxxxxxxxx'; //账号的 AccessKey,在阿里云控制台查看
var secretKey = 'xxxxxxxxxx'; //账号的的 SecretKey,在阿里云控制台查看
var cleansession = true;
var groupId = 'GID_xxxxxxxxxx'; //MQTT GroupID,创建实例后从 MQTT 控制台创建
var clientId = groupId '@@@00001'; //GroupId@@@DeviceId,由控制台创建的 Group ID 和自己指定的 Device ID 组合构成
var mqtt;
var reconnectTimeout = 2000;
var username = 'Signature|' accessKey '|' instanceId; //username和 Password 签名模式下的设置方法,参考文档 https://help.aliyun.com/document_detail/48271.html?spm=a2c4g.11186623.6.553.217831c3BSFry7
var password = "";
export default {
data() {
return {
mecont: []
}
},
onLoad() {
password = $crypto.HmacSHA1(clientId, secretKey).toString($crypto.enc.Base64);
MQTTconnect(this);
},
methods: {

    }  
}  

function MQTTconnect(_this) {  
    mqtt = new $mqtt.Client(  
        host, //MQTT 域名  
        port, //WebSocket 端口,如果使用 HTTPS 加密则配置为443,否则配置80  
        clientId //客户端 ClientId  
    );  
    var options = {  
        userName: username,  
        password: password,  
        useSSL: useTLS, //如果使用 HTTPS 加密则配置为 true  
        onSuccess: function onConnect() { //连接成功  
            _this.mecont.push(new Date()   ": "   "连接成功");  
            // Connection succeeded; subscribe to our topic  
            //订阅消息  
            mqtt.subscribe(topic   "/subDemo1", {  
                qos: 0  
            });  
            //测试消息推送  
            var message = new $mqtt.Message("APP测试消息推送!!"); //set body  
            message.destinationName = topic; // set topic  
            // //发送 P2P 消息,topic 设置方式参考https://help.aliyun.com/document_detail/96176.html?spm=a2c4g.11186623.6.586.694f7cb4oookL7  
            // message = new $mqtt.Message("Hello mqtt P2P Msg!!"); //set body  
            // message.destinationName = topic   "/p2p/"   clientId; // set topic  
            mqtt.send(message);  
        },  
        onFailure: function(message) { //连接失败  
            _this.mecont.push(new Date()   ": "   "连接失败"   JSON.stringify(message));  
            //连接失败,重新连接  
            setTimeout(MQTTconnect, reconnectTimeout);  
        }  
    };  
    mqtt.onConnectionLost = function onConnectionLost(response) {  
        _this.mecont.push(new Date()   ": "   "连接中断"   JSON.stringify(response));  
        //连接失败,重新连接  
        setTimeout(MQTTconnect, reconnectTimeout);  
    };  
    mqtt.onMessageArrived = function onMessageArrived(message) {  
        var topic = message.destinationName;  
        var payload = message.payloadString;  
        _this.mecont.push(new Date()   ": "   "收到新消息"    topic   "   "   payload);  
    };  
    mqtt.connect(options);  
}
1 关注 分享
1***@qq.com

要回复文章请先登录注册

DCloud_UNI_GSQ

DCloud_UNI_GSQ

官方App端已修复 websocket 问题,可以使用 MQTT.js,示例:[https://ext.dcloud.net.cn/plugin?id=854](https://ext.dcloud.net.cn/plugin?id=854)
2019-10-14 16:47
梁敏

梁敏

这有一个利用plus-websocket和修改后的mqttws31.js实现的https://ask.dcloud.net.cn/article/36460
2019-10-09 10:18
1***@qq.com

1***@qq.com

回复 7***@qq.com :
请问您遇到过手动重连失败吗?
2019-09-25 17:07
1***@qq.com

1***@qq.com

请问怎么断开连接呢?
2019-09-25 11:46
5***@qq.com

5***@qq.com

回复 会飞的小白鼠 :
你有没有遇到手机息屏时间长了会重连失败的情况
2019-09-20 10:30
会飞的小白鼠

会飞的小白鼠 (作者)

回复 5***@qq.com :
就是手机端APP,阿里云后台开通服务即可
2019-09-06 14:18
5***@qq.com

5***@qq.com

手机端也可以吗?你买阿里云服务了吗?急求
2019-09-03 15:40
7***@qq.com

7***@qq.com

回复 7***@qq.com :
之前有想过用webview弄,但是改动太多太麻烦,没想到你包装了一下,直接将socket指向webview的websockek,简直眼前一亮啊,感谢大佬!!!!
2019-08-26 17:43
7***@qq.com

7***@qq.com

大哥,用了你的js,终于跑通了,感谢感谢!!!!!!
2019-08-26 17:36