首页 > 其他分享 >鸿蒙项目云捐助第二十二讲云捐助项目物联网IoT鸿蒙端的代码实现

鸿蒙项目云捐助第二十二讲云捐助项目物联网IoT鸿蒙端的代码实现

时间:2024-12-23 20:32:35浏览次数:6  
标签:加密 讲云 鸿蒙 如下 文档 所示 捐助 鉴权

鸿蒙项目云捐助第二十二讲云捐助项目物联网IoT鸿蒙端的代码实现

前面已介绍华为云IoT物联网的云操作和MQTT.fx的模拟器操作。这里通过华为云IoT官方文档实现鸿蒙ArkTS的端侧开发。根据的华为云Iot官方文档地址如下图所示。

这里在API参考文档中可以点击“应用侧HTTPS接口参考”,点击后界面如下图所示。

从设备侧HTTPS接口参考中看到,这里包括设备鉴权,设备信息上报和设备属性上报,这里我们分别介绍设备鉴权,设备属性上报。

一、鸿蒙ArkTS应用端侧Iot的HTTPS设备鉴权

这里的设备鉴权其实就是客户端获取tokens,可以从“应用侧HTTPS接口参考”中看到设备鉴权的相关文档,根据文档可以得知设备鉴权的原理,如下图所示。

通过API文档的说明会得知sign_type其值表示密码加密的方式,这个方式由两部分部分,第一部分是时间加密,第二部分是密码加密。API文档的下面有接口示例的请求方法。如下图所示。

这里有接口说明,同时还有接口的请求方式。同时需要注意,官主给出device_id在进行代码编写时需要更换成自己的device_id,参数中的sign_type赋给定值0, 参数中timestamp时间戳,最后的password表示的是时间戳和原始密码通过两重加密后的结果。

由文档得知,如果要实现设备鉴权,必须对密码进行时间戳和原始密码的双重加密,这里需要使用到鸿蒙的加密库@ohos.security.cryptoFramework,导入库语句在官方华为云文档的案例中如下图所示。

这里我们把鸿蒙云捐助中爱心捐助豆腐块功能条修改功能,使其可以支持“设备鉴权”和“属性上报”。如下图所示。

然后在Mine.ets组件中根据爱心捐助豆腐块的每一个子项的点击事件中判断每一个子项的文字,根据文字决定点击事件决定操作的内容是“设备鉴权”还是“属性上报”。如下图所示。

这里实现“设备鉴权”的逻辑,设备鉴权需要使用鸿蒙Next的加密厍,这个加密是时间的加密,计算时间使用dayjs,加密算法会对内容中的数据进行加密,首先实例化uint8Array的数组数据,然后调用uinit8Array的buffer缓存,如下图所示。

这时导入了三个模块,一个是时间加密的dayjs模块,一个是加密所用到的鸿蒙cryptoFramework模块,一个是缓存buffer模块。

引入模块后,进行设备鉴权需要配置一些参数,这里首先需要华为IOT平台产品实例设备连接的设备id,可以从华为IOT平台产品实例中所有设备中云捐助电子证件设备的详情中可以看到device_id,如下图所示。

这里将device_id复制到鸿蒙代码中,使用变量接收即可。如下图所示。

根据华为IOT开发的官方文档中鉴权的第二个参数sign_type固定为0,鉴权的第三个参数是时间戳的参数,这里将三个参数使用变量准备好。

这里鉴权的最后一个参数password,根据华为的IOT开发文档,就需要两重加密,第一重是HMAC加密,第二重 SHA256加密。第一重的HMAC加密的时间戳,第二重SHA256加密的是设备的原始密码。先使用HMAC加密时间戳。代码如下所示。

在代码中首先使用cryptoFramework模块的creatSymKeyGenerator方法指示出加密的方式是什么,然后需要实例化一个Uint8Array的数组,把加密的内容时间戳做为uint8的参数传入,传入的时间戳参数需要通过调用buff模块转成buff的缓存数据,最后调用加密方式的convertKey方法对数据进行加密。

这里官方在使用coverKey方法时加入一个异步的操作,这里我们也加给convertKey方法的返回加上await的导步处理,代码如下所示。

在调用方法前加入await,就需要在onClick方法中加入async的异步处理,代码如下所示。

接下来再去进行secret密码的加密,时间戳加上secret就是最终的密码,接下来继续加密secret,这里的serect加密的方式使用SHA256的方式,这种加密方式是通过createMac来完成,使用mac的init,update,最后是doFinal获取,得到的是一个两位16进制的数组,如下图所示的输出数据。

把这样的数值整合在一起,才是最终的密码。由于数组中每一索引的数字是两个16进制数构成,每一个索引的数字就是32位,即16乘以2,在鸿蒙IOT文档对密码的描述中,其固定长度为64位,如下图所示。

根据这样的规定,如果把数据中的两个相邻索引的数据两位两位放在一起就是64位的固定密码组件,因此,处理64位密码技术需要使用padStart的方法来填充,表示当数据不满足64位时需要填充。

在代码上首先把secret和时间戳的加密放在一起进行SHA256的加密,最终得到一个result变量接收的数组,代码如下图所示。

这里首先通过cryptoFramework模块调用createMac方法指定加密方式为SHA256,然后把加密的原始secret密码做为uint8的参数传入,传入的原始secret密码需要通过调用buff模块转成buff的缓存数据,转化后,由原指定加密方式SHA256的变量先使用mac.init初始化之前由时间戳产生的密码,然后把buff缓存中secret密码由mac执行update更新,最后实现mac的doFinal方法就可以得到一个32位加密数据的分隔数组。接下来遍历数组中的每一个32位数值,构建密码时对于不足64位的密码通过paddingStart进行补0实现。代码如下图所示。

这样就产生的设备鉴权的密码,接下来在文档中查找设备鉴权的接口。如下图所示。

在设备鉴权地址中需要使用到endpoint的内容,这里在文档中可以找到“平台对接信息”的链接,如下图所示。

这里点击“平台对接信息”的链接,在左栏“总览”中可以看到“接入信息”的按钮。如下图所示。

点击“接入信息”的按钮后,在接入信息显示中可以看到HTTPS的地址链接。如下图所示。

这里可以点击接入信息HTTPS对应后面的复制按钮,然后复制以鸿蒙请求代码中,鸿蒙根据请求地址,再加上之前的参数设置,使用http模块就可以实现设备鉴权的请求,如下图所示。

这里首先在代码上使用http模块的createHttp()方法建立http请求,得到请求变量后,调用变量的request方法请求文档中给定的地址进行鉴权,由于是post方式的请求,在request方法请求时需要使用extraData指定post请求的上传参数,这里需要提供device_id,sign_type,timestamp,password等4个参数,4个参数的值在之前的代码中已经通过变量获取。当request鉴权请求成功时在then方法中输出对应的信息。接下来,在组件中设置一个全局的access_token变量,有来接收鉴权获取的内容,如下图所示。

在鉴权成功后进行全局access_token的赋值,代码如下图所示。

项目页面预览后,点击“设备鉴权”可以看到服务器返回的结果,如下图所示。

完成设备鉴权后,需要进行属性上报的功能开发。

二、鸿蒙ArkTS应用端侧Iot的HTTPS属性上报

首先还是从MQTT.fx调测中找到属性上报的接口文档内容,如下图所示。

这里显示了上报的地址,在文档的下面有上报接口携带的数据格式描述,如下图所示。

官方文档指出,在上报内容时需要把access_token的值放在请求头的headers中,把接口请求的地址和内容通过http进行代码调用后,如下图所示。

这里使用之前的http模块createHttp方法建立的请求httpRequest1,然后调用request方法进行请求,请求的地址就是上报数据的地方,官方已给出的地址直接复制到接收变量url中,在request请求提交时,由于使用post方式,需要在extraData中指定携带的参数, service_id就是建立的华为云IOT产品实例的产品详情中的服务id,properties属性对应华为云IOT产品实例的产品详情中的服务对应的属性。后面还有headers中access_token的设置,不同的参数对应不同的华为云文档。如下图所示。

这里是华为IOT文档和参数之间的对应图。最终得到的请求数据属性上报的请求参数设置如下图所示。

request方法把请求参数提交到数据上报的接口后,在then方法中对获取结果进行解析,如下图所示。

项目页面预览后,点击“属性上报”可以看到服务器返回的结果,如下图所示。

在华为IOT物联网产品实例设备在线调试平台中也可以查看到上报的数据,如下图所示。

这里使用代码完成了华为IOT物联网平台的设备鉴权和属性上报,后续还会带来华为云操作在鸿蒙项目云捐助上的精彩,欢迎关注。

标签:加密,讲云,鸿蒙,如下,文档,所示,捐助,鉴权
From: https://blog.csdn.net/play_big_knife/article/details/144665403

相关文章

  • 华为仓颉鸿蒙Next原生UI基础组件Search
    提供搜索框组件,用于提供用户搜索内容的输入区域。子组件无构造函数init(String,String,Option,Option)publicinit(value!:String="",placeholder!:String="",icon!:Option<CJResource>=Option.None,controller!:Option<SearchController>=Option.......
  • 鸿蒙Next ArkTS高性能编程实战
    一、引言在应用开发中,高性能编程对于提升用户体验至关重要。本文将详细介绍鸿蒙NextArkTS在高性能编程方面的实践经验,包括声明与表达式、函数、数组以及异常处理等方面的优化技巧,助力开发者打造高效能的应用。二、声明与表达式(一)使用const声明不变的变量在编程过程中,对于那些......
  • 鸿蒙Next ArkTS编程规范总结
    一、目标和适用范围ArkTS编程规范参考业界标准及实践,结合ArkTS语言特点,旨在提高代码的规范、安全和性能,适用于开发者使用ArkTS编写代码的系统开发或应用开发场景。二、规则来源ArkTS在TypeScript基础上强化静态检查和分析,部分规则源于《OpenHarmony应用TS&JS编程指南》,并为ArkT......
  • 开源轻量级IM框架MobileIMSDK的鸿蒙NEXT客户端库已发布
    一、基本介绍MobileIMSDK-鸿蒙端是一套基于鸿蒙Next(纯血鸿蒙)系统的IM即时通讯客户端库:1)超轻量级(编译后库文件仅50KB)、无任何第3方库依赖(开箱即用);2)纯ArkTS编写、无Native代码、高度提炼、简单易用;3)基于鸿蒙Next标准WebSocket API,简洁优雅;4)可运行于任何支持鸿蒙Next的平台......
  • 鸿蒙(HarmonyOS)原生AI能力之文本识别
    鸿蒙(HarmonyOS)原生AI能力之文本识别原生智能介绍在之前开发中,很多场景我们是通过调用云端的智能能力进行开发。例如文本识别、人脸识别等。原生即指将一些能力直接集成在本地鸿蒙系统中,通过不同层次的AI能力开放,满足开发者的不同场景下的诉求,降低应用开发门槛,帮助开发者......
  • 在鸿蒙NEXT中实现完全自定义导航栏
    在日常app开发中,导航栏扮演着重要的角色。鸿蒙提供了系统导航栏Navigation,它支持很多属性的修改,但是应用需求更加灵活多变,比如有的导航栏有背景图片,有的导航栏要求渐变色,有的导航栏需要随时隐藏和显示等等。遇到这些需求系统的Navigation就无法实现,这时候我们就需要自定义导航栏......
  • 鸿蒙Next ArkTS语法适配背景概述
    一、引言ArkTS在保持TypeScript(TS)基本语法风格的基础上,通过规范强化静态检查和分析,在程序开发期检测更多错误,提升程序稳定性与运行性能。本文将阐述为何建议将TS代码适配为ArkTS代码。二、程序稳定性(一)动态类型语言的问题以JavaScript(JS)为代表的动态类型语言,虽能让开发者快速......
  • 鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Ne
    鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析万物智联,打造无缝智能生态在科技不断迭代更新的今天,每一次技术的飞跃都是对未来的深刻探索。华为,这个始终站在科技前沿的企业,再次以HarmonyOS5.0(Next)这一操作系统的新篇章,向我们展示了科技如何以前所未有的方......
  • 鸿蒙初学者学习手册_应用开发页面路由(页面路由(Navigation )(一))
    实现页面路由可以分为两种方法,Router和Navigation首先,想象一下你在玩手机上的一个App,比如淘宝。你从一个页面(比如首页)跳到另一个页面(比如商品详情页),这就是页面跳转。页面路由(@ohos.router):这就像是一条条固定的路,比如从家到学校的路。你只能按照这些路走,不能随意偏离。在......
  • 鸿蒙开发实战:鸿蒙应用开发中的页面管理工具类详解
    一、引言在鸿蒙应用开发的征程中,如何高效地管理页面布局与显示,以满足用户对于沉浸式体验、个性化StatusBar颜色等界面特性的需求,一直是开发者们关注的焦点。为此,我特别设计了一款实用的“页面管理工具类”,它具备强大的功能,能帮助开发者轻松应对各种页面管理挑战。二、页面管理工......