【端云一体化】云函数的使用

前言

为丰富HarmonyOS对云端开发的支持、实现端云联动,DevEco Studio以Cloud Foundation Kit(云开发服务)为底座、在传统的“端开发”基础上新增“云开发”能力,开发者在创建工程时选择合适的云开发工程模板,即可在DevEco Studio内同时完成HarmonyOS应用/元服务的端侧与云侧开发,体验端云一体化协同开发。

接下来,本小节将深入细致地介绍云函数的整个开发流程,从环境搭建到代码编写,再到测试与部署,每一步都将为您揭开端云一体化开发的神秘面纱。

参考文档:端云一体化开发

前期准备

Step1:创建AGC项目

Step2:创建HarmonyOS应用/元服务

Step3:

 使用云函数前请先开通云函数服务

此时就已经开通完成

创建应用工程

如果是应用可参照文档 创建HarmonyOS应用工程

如果是元服务可参照文档 创建元服务工程

注意:

Bundle name 需要与 AGC 中所创建的包名保持一致!!!

AGC中的应用包名可以在项目设置中查看,如下图:

应用工程创建完成后,会有两个目录:ApplicationCloudProgram

端侧开发在Application目录下进行,云侧开发在CloudProgram目录下进行。

云侧开发云函数

新建云函数

可参照文档:创建并配置函数

cloudfunctions 目录下右键新建  Cloud Function

“cloudfunctions”目录下生成新建的“hello”函数目录,目录下主要包含如下文件:

  • 函数配置文件“function-config.json”
  • 函数入口文件“hello.ts”
  • 依赖配置文件“package.json”

hello.ts 里内容如下:

let myHandler = async function (event, context, callback, logger) {logger.info(event);// do something herecallback({code: 0,desc: "Success."});
};export { myHandler };

四大参数:

  • event:包含了触发函数执行的事件的数据。
  • context:关于函数执行环境的信息。
  • callback:用于在异步操作中完成后返回结果。
  • logger:用于记录日志的对象。

云函数触发时机

  • http请求

可在配置文件“function-config.json”的“triggers”下配置触发器,

编写云函数

let myHandler = async function (event, context, callback, logger) {logger.info(JSON.stringify(event));// do something herecallback({code: 200,msg: "Hello"});
};export { myHandler };

 调试云函数

 可参照文档:调试函数

 由此可见,本地调试云函数成功

部署云函数

cloudfunctions 目录下右键Deplpy Cloud Functions

操作完成后,可以前往AGC控制台查看云函数

点击测试,测试一下云函数

测试结果同本地测试。测试日志,可以点击运行日志进行查看。

端侧调用云函数

添加依赖

Application\entry\oh-package.json5 文件下添加依赖

{"license": "","devDependencies": {},"author": "","name": "entry","description": "Please describe the basic information.","main": "","version": "1.0.0","dependencies": {"@hw-agconnect/cloud": "^1.0.0","@hw-agconnect/hmcore": "^1.0.0",}
}

初始化AGC

Application\entry\src\main\ets\entryability\EntryAbility.ets 文件下配置

import { abilityAccessCtrl, AbilityConstant, PermissionRequestResult, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
import {initialize} from  "@hw-agconnect/hmcore";
import buffer from '@ohos.buffer';export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {let AtManager = abilityAccessCtrl.createAtManager();AtManager.requestPermissionsFromUser(this.context, ['ohos.permission.READ_MEDIA', 'ohos.permission.MEDIA_LOCATION']).then((data: PermissionRequestResult) => {hilog.info(0x0000, 'testTag', '%{public}s', 'request permissions from user success' + data);}).catch((err: Object) => {hilog.error(0x0000, 'testTag', 'Failed to request permissions from user. Cause: %{public}s',JSON.stringify(err) ?? '');});hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');}onDestroy(): void {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');}async onWindowStageCreate(windowStage: window.WindowStage) {const context = this.contextconst  value = await context.resourceManager.getRawFileContent("agconnect-services.json")let json:string= buffer.from(value).toString("utf8")initialize(this.context,JSON.parse(json))// Main window is created, set main page for this abilityhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');windowStage.loadContent('pages/Splash', (err, data) => {if (err.code) {hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');return;}hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');});}onWindowStageDestroy(): void {// Main window is destroyed, release UI related resourceshilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');}onForeground(): void {// Ability has brought to foregroundhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');}onBackground(): void {// Ability has back to backgroundhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');}
}

⚠️注意:

agconnect-services.json 需要从 AGC 中的项目设置进行下载。

然后添加在 \Application\entry\src\main\resources 下新建目录 rawfile 并移动至该目录。

如果云侧项目开通了新的服务,端侧需要重新下载 agconnect-services.json 。

调用云函数

import hilog from '@ohos.hilog';
import cloud from '@hw-agconnect/cloud'interface HelloResponse {code: number,msg: string
}@Entry
@Component
struct Index {@State msg: string = ""build() {Row(){Column(){Button("调用云函数").onClick(async ()=>{const res = await cloud.callFunction({name: "hello"})hilog.info(0,"hello",JSON.stringify(res))/** {"ret":{"code":0,"msg":"OK"},"responseBody":{"code":200,"msg":"Hello"}}* */const val: HelloResponse = res.getValue()hilog.info(0,"hello",JSON.stringify(val))/** {"code":200,"msg":"Hello"}* */this.msg = val.msg})Text(this.msg)}.width("100%")}.height("100%")}
}

⚠️注意:

查看云函数调用结果需要使用模拟器进行操作 

云函数传参

修改端侧代码

import hilog from '@ohos.hilog';
import cloud from '@hw-agconnect/cloud'interface HelloResponse {code: number,msg: string
}@Entry
@Component
struct Index {@State msg: string = ""@State name: string = ""build() {Row(){Column(){TextInput({placeholder: "请输入姓名"}).onChange((value: string)=>{this.name = value;})Button("调用云函数").onClick(async ()=>{const res = await cloud.callFunction({name: "hello",params: {name: this.name}})hilog.info(0,"hello",JSON.stringify(res))/** {"ret":{"code":0,"msg":"OK"},"responseBody":{"code":200,"msg":"Hello"}}* */const val: HelloResponse = res.getValue()hilog.info(0,"hello",JSON.stringify(val))/** {"code":200,"msg":"Hello"}* */this.msg = val.msg})Text(this.msg)}.width("100%")}.height("100%")}
}

加入了文本框,用于输入要传递的参数。

修改云侧代码

使用 event 获取端侧传递的参数

event 对象参照文档:event对象

let myHandler = async function (event, context, callback, logger) {logger.info(JSON.stringify(event));const obj = JSON.parse(event.body)const name = obj.namecallback({code: 200,msg: `Hello ${name}`});
};export { myHandler };

结语

至此,我们已经详尽地介绍了云函数的操作流程,从项目初始化到云函数的具体实现,再到调试与部署。在下一小节中,我们将介绍华为认证服务的是如何使用的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/1571.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vLLM私有化部署大语言模型LLM

目录 一、vLLM介绍 二、安装vLLM 1、安装环境 2、安装步骤 三、运行vLLM 1、运行方式 2、切换模型下载源 3、运行本地已下载模型 四、通过http访问vLLM 一、vLLM介绍 vLLM(官方网址:https://www.vllm.ai)是一种用于大规模语言模型&#x…

【Linux 之一 】Linux常用命令汇总

Linux常用命令 ./catcd 命令chmodclearcphistoryhtoplnmkdirmvpwdrmtailunamewcwhoami 我从2021年4月份开始才开始真正意义上接触Linux,最初学习时是一脸蒙圈,啥也不会,啥也不懂,做了很多乱七八糟,没有条理的笔记。不知…

蓝牙BT04-A的使用与相关AT指令

一、AT指令没有返回的问题及解决方案 检查指令格式: 确认指令格式是否正确,包括特定的命令和结尾的回车换行符(n)。 检查TX/RX连接: 确认TX(发送)和RX(接收)线是否连接正…

国产Docker可视化面板Dpanel的安装与功能解析

国产Docker可视化面板Dpanel的安装及功能介绍 Docker 可视化面板系统,提供完善的 docker 管理功能。 支持查看基本信息、运行状态统计、网络统计、磁盘统计、用量统计等功能 ​​ ​​ 容器管理: ​​ 创建/修改容器 ​​ 支持基本配置、环境变量、…

金融项目实战 06|Python实现接口自动化——日志、认证开户接口

一、日志封装及应用(理解) 🔴日志的作用: 记录程序运行的步骤和错误。 🔴日志的场景: 1、调试bug2、查看程序运行轨迹 🔴日志基本应用: # 1、导包 import logging # 2、调用日…

第423场周赛:检测相邻递增子数组 Ⅰ、检测相邻递增子数组 Ⅱ、好子序列的元素之和、统计小于 N 的 K 可约简整数

Q1、检测相邻递增子数组 Ⅰ 1、题目描述 给你一个由 n 个整数组成的数组 nums 和一个整数 k&#xff0c;请你确定是否存在 两个 相邻 且长度为 k 的 严格递增 子数组。具体来说&#xff0c;需要检查是否存在从下标 a 和 b (a < b) 开始的 两个 子数组&#xff0c;并满足下…

vue 与 vue-json-viewer 实现 JSON 数据可视化

前言 接口的调试和测试是确保系统稳定性的重要步骤。为了让开发人员和测试人员能够直观地查看接口返回的 JSON 数据&#xff0c;使用合适的工具至关重要。vue-json-viewer 插件为 vue 开发者提供了一个简单而强大的解决方案。本文将详细介绍如何在 vue 项目中使用该插件&#x…

开源项目stable-diffusion-webui部署及生成照片

参考链接 https://www.freedidi.com/13133.html 基础环境部署 python 官网链接 Python Release Python 3.10.6 | Python.org 下载 Python 3.10.6 版本安装包 下载好后双击 点击安装&#xff0c;这里需要选择一下&#xff0c;把环境变量加上。&#xff08;这里是默认安装到C盘…

宝塔面板 申请证书后 仍然提示不安全

证书显示有效&#xff0c;但是网站显示不安全 导致的原因是引入静态文件使用的是HTTP&#xff0c;查看方法为F12打开console控制台 可以看到静态文件全部都是HTTP 网站采用wordpress搭建&#xff0c;基于问题解决&#xff0c;其他方式搭建也是一样&#xff0c;处理掉所有的H…

14X505-1《火灾自动报警系统设计规范图示》中相关数据和总线制的个人理解

目录 内容简介一、设计容量1.1 设备总数or地址总数1.2 报警与联动合用总线怎么办1.3 10%余量 二、总线短路隔离器2.1 设备总数or地址总数2.2 短路隔离器计入设备数吗2.3 电源要隔离吗2.4 穿越没有设备的防火分区要加短路隔离吗2.5 思考&#xff1a;一个回路可以带几个短路隔离器…

PCB印刷电路板快速上手04电容元件

1.电容元件 电容&#xff1a;又叫电容器&#xff0c;是指容纳电荷本领的物理量。 电容元件是表征电路元件储存电荷特性的理想元件&#xff0c;在电路分析学科中是除电阻元件、电感元件以外的基本电路元件。 电容一般用通常用“C”表示&#xff08;Capacitance&#xff09; 电…

风水算命系统架构与功能分析

系统架构 服务端&#xff1a;Java&#xff08;最低JDK1.8&#xff0c;支持JDK11以及JDK17&#xff09;数据库&#xff1a;MySQL数据库&#xff08;标配5.7版本&#xff0c;支持MySQL8&#xff09;ORM框架&#xff1a;Mybatis&#xff08;集成通用tk-mapper&#xff0c;支持myb…

HarmonyOS NEXT开发进阶(六):HarmonyOS NEXT实现嵌套 H5 及双向通信

文章目录 一、前言二、鸿蒙应用加载Web页面2.1 加载网络地址页面2.2 加载本地H5页面 三、实现Web组件 H5 层与鸿蒙应用层进行相互通讯3.1 鸿蒙应用向 H5 页面发送数据3.2 H5页面向鸿蒙应用发送数据 四、拓展阅读 一、前言 随着HarmonyOS NEXT的快速发展&#xff0c;越来越多的…

OPT: Open Pre-trained Transformer语言模型

摘要 大规模语言模型通常需要数十万计算日的训练时间&#xff0c;展现了在零样本和小样本学习中的显著能力。鉴于其计算成本之高&#xff0c;这些模型在没有大量资本投入的情况下难以复现。对于那些通过API提供的少数模型&#xff0c;研究者无法获取完整的模型权重&#xff0c…

探索图像编辑的无限可能——Adobe Photoshop全解析

文章目录 前言一、PS的历史二、PS的应用场景三、PS的功能及工具用法四、图层的概念五、调整与滤镜六、创建蒙版七、绘制形状与路径八、实战练习结语 前言 在当今数字化的世界里&#xff0c;视觉内容无处不在&#xff0c;而创建和编辑这些内容的能力已经成为许多行业的核心技能…

ffmpeg 编译遇到的坑

makeinfo: error parsing ./doc/t2h.pm: Undefined subroutine &Texinfo::Config::set_from_init_file called at ./doc/t2h.pm line 24. 编译选项添加&#xff1a; --disable-htmlpages

CSS | 实现三列布局(两边边定宽 中间自适应,自适应成比)

目录 示例1 &#xff08;中间自适应 示例2&#xff08;中间自适应 示例3&#xff08;中间自适应 示例4 &#xff08;自适应成比 示例5&#xff08;左中定宽&#xff0c;右边自适应 示例6&#xff08;中间自适应 示例7&#xff08;中间自适应 示例8&#xff08;中间定宽…

《自动驾驶与机器人中的SLAM技术》ch9:自动驾驶车辆的离线地图构建

目录 1 点云建图的流程 2 前端实现 2.1 前端流程 2.2 前端结果 3 后端位姿图优化与异常值剔除 3.1 两阶段优化流程 3.2 优化结果 ① 第一阶段优化结果 ② 第二阶段优化结果 4 回环检测 4.1 回环检测流程 ① 遍历第一阶段优化轨迹中的关键帧。 ② 并发计算候选回环对…

20250112面试鸭特训营第20天

更多特训营笔记详见个人主页【面试鸭特训营】专栏 250112 1. TCP 和 UDP 有什么区别&#xff1f; 特性TCPUDP连接方式面向连接&#xff08;需要建立连接&#xff09;无连接&#xff08;无需建立连接&#xff09;可靠性可靠的&#xff0c;提供确认、重传机制不可靠&#xff0c…

【Rust】错误处理机制

目录 思维导图 引言 一、错误处理的重要性 1.1 软件中的错误普遍存在 1.2 编译时错误处理要求 二、错误的分类 2.1 可恢复错误&#xff08;Recoverable Errors&#xff09; 2.2 不可恢复错误&#xff08;Unrecoverable Errors&#xff09; 三、Rust 的错误处理机制 3…