先说一下我们公司的项目吧,我们公司做了一个“智能家居App”,就是把一些智能设备接入到App当中,什么智能音响,智能门锁,智能空调啊,然后用App的控制,因为接入的设备太多了,每个设备又对应了很多个控制面板,所以领导想尝试用RN做面板,第一个尝试,就是接入一款空调设备,App连上空调后(这款是用蓝牙连接的),通过App发命令调节温度什么的,通过MQTT接收推送,刷新页面(毕竟空调也能用原装遥控器嘛,遥控起调节了温度,App上的页面肯定要刷新的,不然就不同步了),好了,说了这么废话,进入正题吧.
查了一下RN集成MQTT的话需要引入(react_native_mqtt)这个库,方法比较简单
1 npm install react_native_mqtt --save
2 import init from 'react_native_mqtt';
3 import { AsyncStorage } from 'react-native';
4 配一些参数,按他的来就行了
5 然后就是连接了
说说上面的4个参数吧
1 地址 需要跟后台确认
2 端口号 需要跟后台确认(比较重要)
3 path 这里可不填 默认是 '/mqtt'. 但是我们不是(真是坑,) 所以我这里填了空 后面说
4 clientId 订阅的设备ID 因为我们的设备比较多,这个是后台自己命名的,找后台要
然后就是发起连接
client.connect
然后就会调用几个方法
第一个onConnect,连接上就会调用
client.subscribe就是非常重要的订阅方法了 里面需要传订阅的主题,前面说的我司的path不是/mqtt 是/SH/S2H,后面跟的这个参数是订阅的“主题号”跟前面的clientID不是一回事,需要跟后台确认,一定要填,不然收不到推送,因为没有订阅到指定的主题.
订阅成功后
onMessageArriver 就是接受推送的方法了
以上就是收命令推送的方法了
下面就是发命令了
我司的发命令没有通过 client.messge这个方法去发,而是用的普通的http调接口去发的
使用fetch请求,因为我们是GET所以把参数拼在了url后面,做的拼接.然后就完事了