河源正规网站建设价格,在线分析网站,青岛seo关键词,做网站汉狮网络目录
引言
安装MQTT软件包
避免MQTT软件包自动升级
程序的编写
运行测试
结语 引言
虽然我的课主要是OpenHarmony南向开发的#xff0c;但是结课时有个同学说他在写鸿蒙APP时无法将MQTT库加入到设备中#xff0c;希望我帮忙看看。由于他没有鸿蒙的真机#xff0c;只能…目录
引言
安装MQTT软件包
避免MQTT软件包自动升级
程序的编写
运行测试
结语 引言
虽然我的课主要是OpenHarmony南向开发的但是结课时有个同学说他在写鸿蒙APP时无法将MQTT库加入到设备中希望我帮忙看看。由于他没有鸿蒙的真机只能用DevEco Studio中通过的模拟器来实现而自带的模拟器只支持API9和API6而下载的MQTT库是支持API11的。今天就来说说在API9中如何实现MQTT客户端使用的DevEco Studio版本是3.11。
安装MQTT软件包
官方有个MQTT软件包ohpm/mqtt我写作时最新的版本是2.14针对的是API12。虽然可以将其降级为2.0.5-rc.0或者2.0.6使其支持API9但是由于其是从C语言版本移植过来的依赖C语言的库文件.so)而官方仓库中只提供了ARM版本的所以在真机上可以用但是在基于x86的本机模拟器上没法用会出现”Failure[ERR_INSTALL_PARSE_NATIVE_SO_FAILED]“错误。如果要使用就需要使用SDK重新编译C语言文件产生x86可以用的库文件有点麻烦。
今天推荐使用paho-mqtt: paho-mqtt移植这个库是从js版本移植过来的没有C语言编译的问题。当然这个库的限制是其使用的是websocket通信因此只支持ws或wss开头的websocket连接方式的MQttBooker服务。 好在现在支持wss的服务器比较多像巴法云、华为IoTDA、emqx都支持因为小程序多使用wss。
安装软件包可以在Terminal中使用如下命令
ohpm install yyz116/paho-mqtt 安装后要修改oh_modules/yyz116/paho-mqtt/src/main/module.json文件将其中的minAPIVersion和targetAPIVersion版本号都改为9。
{app: {bundleName: com.yyz116.paho.mqtt,debug: true,versionCode: 1000000,versionName: 1.0.0,minAPIVersion: 9,targetAPIVersion: 9,apiReleaseType: Release,compileSdkVersion: 5.0.0.65,compileSdkType: HarmonyOS,appEnvironments: [],bundleType: app},module: {name: library,type: har,deviceTypes: [default,tablet],packageName: yyz116/paho-mqtt,installationFree: false,virtualMachine: ark12.0.2.0,compileMode: esmodule,dependencies: []}
}
避免MQTT软件包自动升级
上面的操作中修改了module.json文件但是当三方包发布新版本后点击同步工程会出现默认更新安装的三方包版本情况。为了避免这种情况手工修改oh-package.json5将其中yyz116/paho-mqtt一行版本号前面的“^符号删除掉这样保证安装固定版本的三方包。
{name: myapplication,version: 1.0.0,description: Please describe the basic information.,main: ,author: ,license: ,dependencies: {yyz116/paho-mqtt: ^1.0.1},devDependencies: {ohos/hypium: 1.0.6},dynamicDependencies: {}
}
程序的编写
我编写了一个简单的测试程序在前面先加上引用。
import MQTT from yyz116/paho-mqtt
然后在按钮点击的事件函数中加入代码 buttonClick(){let client new MQTT.Client(bemfa.com, 9504, /wss,xxxxxxxx);client.trace msg {console.log(msg.message);};client.connect({timeout: 10,keepAliveInterval: 60,cleanSession: true,useSSL: true,// invocationContext: {// asdf: true,// },onSuccess: o {//console.log(connected: , o.invocationContext.asdf);console.log(connected: );promptAction.showToast({message: 连接到服务器 //弹窗内容});client.send(light002, 123456, 0, true);},mqttVersion: 3,onFailure: e {console.error(could not connect: , e.errorMessage);promptAction.showToast({message: 无法连接到服务器 //弹窗内容});},reconnect: false,});}这里需要注意巴法云加密websocket协议端口9504 path/wss。这和TCP端口是不同的。
为程序加入访问网络的权限修改src/main/module.json5文件加入requestPermissions这一段。
......pages: $profile:main_pages,requestPermissions: [{name: ohos.permission.INTERNET,usedScene: {when: always}}],abilities: [
......
运行测试
启动模拟器运行程序如下。点击Connect按钮就可以了。 登录到巴法云后台可以看到light002设备的值已经被更新。 结语
至此基本完成了在API9和x86模拟器上运行MQTT客户端的要求。如果各位有更好的办法欢迎留言。