鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇

简介: 本文介绍基于华为AGC的端云一体化开发流程,涵盖项目创建、云函数开通、应用配置及DevEco集成。重点讲解云函数的编写、部署、调用与传参,并涉及环境变量设置、负载均衡、重试机制与熔断策略等高阶特性,助力开发者高效构建稳定云端服务。
前言

TODO:新建项目和应用,开通云函数服务(AGC)

端侧开发:Arkts界面开发

云测开发:云函数、认证服务、云存储、云数据库

一、登录

地址:https://id1.cloud.huawei.com/CAS/portal/loginAuth.html?reqClientType=89&loginChannel=89000500&regionCode=cn&loginUrl=https%3A%2F%2Fid1.cloud.huawei.com%3A443%2FCAS%2Fportal%2FloginAuth.html&lang=zh-cn&themeName=red&clientID=6099200&state=6475652&service=https%3A%2F%2Foauth-login1.cloud.huawei.com%2Foauth2%2Fv2%2FloginCallback%3Faccess_type%3Doffline%26client_id%3D6099200%26display%3Dpage%26flowID%3D0a8a7027000001d17220498962333586%26h%3D1722049896.2350%26lang%3Dzh-cn%26redirect_uri%3Dhttps%253A%252F%252Fdeveloper.huawei.com%252Fconsumer%252Fcn%252Fservice%252Fjosp%252Fagc%252FhandleAllianceLogin.html%26response_type%3Dcode%26scope%3Dopenid%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Fcountry%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Fbase.profile%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Floginid%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Faccount.flags%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Frealname%252Fstate%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Frealname%252Fidentity%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Frealname%252Fctf.type%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Fstate.register%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Fanonymous.mobile%26state%3D6475652%26v%3D3ceb962d429ac960ada527fb822d9924d121e8dd37f0f7e61b8f77d68858b485&validated=true

二、新建项目

登录后点击我的项目:https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/

新建项目》点击添加项目》输入项目名称》点击创建并继续

关闭分析服务,点击完成。

三、开通云函数服务

左侧菜单找到云函数并点击并点击立即开通

数据处理位置选择中国设置为默认并点击确定

四、创建应用

点击左侧菜单中的项目设置后 ,点击添加应由

在添加应用中的选择App(HarjmonyOS)平台,并点击下方的APP ID

设置应用信息后,点击下一步后,并点击确认

查看项目设置,已经存在应用信息

五、DevEco创建端云一体化应用

新建项目,选择端云一体化模版后点击next

注意:使用DevEco创建应用的包名需要与在AGC网站上创建的应用包名一致。
设置完成后,点击next

如果设置的包名与AGC网站上的一致的话,DevEco将会自动关联在AGC网站上创建的应用。
点击Finish后,应用创建完成。

六、创建云函数

选中cloudFunctions右键添加cloud Function
起名为:test
点击OK

七、云函数代码结构介绍

可以出发云函数的时机:
  http请求
  云数据库(可以在插入数据时触发云函数...)
  云存储 (可以在上传文件时触发云函数...)
/*
event:表示输入的信息
context:云函数执行时,上下文信息(如:环境变量)
callback:输出(返回结果)
logger:记录日志(四个级别:debug、info、warn、error)
*/
let myHandler = async function (event, context, callback, logger) {
  logger.info(event);
  // do something here
  callback({
    code: 0,
    desc: "Success."
  });
};
export { myHandler };

八、云函数编写

let myHandler = async function (event, context, callback, logger) {
  // 打印输入的信息,因为传递的内容可能是一个对象,所以使用JSON方法解析
  logger.info(JSON.stringify(event));
  // 返回的内容
  callback({
    code: 0,
    message: "Cloud Function test"
  });
};
// 暴露
export { myHandler };

八、云函数运行

调用云函数有两种方法:
1、 本地部署测试
2 、云端部署测试
1.1.1. 本地部署测试
cloudfunctions右键 Run cloud functions
查看控制台获取到url: http://localhost:18090/test/invoke.

PostMan测试并查看日志信息

1.1.2. 云端部署测试
cloudFunctions目录右键选择deploy cloud functions
注意:在上传云端时,devEco需要登录华为账号

云端查看

点击测试

九、端侧调用云函数

1.1. 添加依赖

entry目录下的oh-package.json5
// 添加:主要前2个依赖
"dependencies": {
    "@hw-agconnect/cloud": "^1.0.0",
    "@hw-agconnect/hmcore": "^1.0.0",
    "@hw-agconnect/auth-component": "^1.0.0",
    "long": "5.2.1"
  }

1.2. 初始化AGConnect

// 修改EntryAbility.ets文件
// 初始化方法一:
import {initialize} from  "@hw-agconnect/hmcore"
import jsonStr from "../../resources/rawfile/agconnect-services.json"
  onCreate(){
    try {
      initialize(this.context,jsonStr)
    }catch (e){
      console.error(JSON.stringify(e))
    }
  }
// 修改EntryAbility.ets文件
// 初始化方法二:
import {initialize} from  "@hw-agconnect/hmcore"
 onCreate(){
    // 初始化
      const context = this.context
      const  value = await context.resourceManager.getRawFileContent("agconnect-services.json")
      let json:string= buffer.from(value).toString("utf8")
      console.log(json)
      initialize(this.context,json)
  }

1.3. ArkTS界面开发

// 在pages目录中创建一个MyIndexd.ets页面,并添加一个按钮从而出发云函数
@Entry
@Component
struct MyIndex {
  build() {
    Column(){
      Button("调用test云函数").onClick(()=>{
      })
    }.width("100%").height("100%")
  }
}

1.4. ArkTS调用云函数

// 使用按钮添加单击事件,引入cloud对象来调用云函数
import cloud from '@hw-agconnect/cloud'
@Entry
@Component
struct MyIndex {
  @State message:string = "test"
  build() {
    Column(){
      Button("调用test云函数").onClick( async()=>{
        console.log("s")
 const result =   await   cloud.callFunction({
        name:'test', // 云函数名称
        version:"$latest", // 云函数版本,$latest表示为最新版
        params:{} // 传递参数
      })
        this.message =result.getValue().message
      })
      Text(this.message)
    }.width("100%").height("100%")
  }
}

九、云函数传参

TODO 添加一个文本输入框,将输入框中的内容发送到test云函数中,并返回到页面的文本框中
1.1.1. 界面:
import cloud from '@hw-agconnect/cloud'
@Entry
@Component
struct MyIndex {
  @State message:string = "abcv"
  @State name:string = ""
  build() {
    Column({space:20}){
      TextInput({placeholder:"请输入姓名"}).width("80%").height(60).margin({top:20})
        .onChange((value)=>{this.name = value})
      Button("调用test云函数").onClick( async()=>{
        console.log("s")
 const result =   await   cloud.callFunction({
        name:'test',
        version:"$latest",
        params:{name:this.name}
      })
        this.message =result.getValue().message
      })
      Text(this.message)
    }.width("100%").height("100%")
  }
}
1.1.2. 云函数:
// body 为JSON结构,需要通过JSON进行转换
let myHandler = async function (event, context, callback, logger) {
  logger.info(JSON.stringify(event));
  const name =JSON.parse( event.body) .name
  callback({
    code: 0,
    message: `hello ${name}`
  });
};
export { myHandler };
1.1.3. 更新
cloudFunctions目录右键选择deploy cloud functions

九、云函数-环境变量

  1. 云函数代码
// 环境变量存在于context的env中 
// 编辑后并上传云中
let myHandler = async function (event, context, callback, logger) {
  logger.info(JSON.stringify(event));
  const name =JSON.parse( event.body) .name
  const content = context.env.content
  callback({
    code: 0,
    message: `hello ${name},content=${content}`
  });
};
export { myHandler };
  1. 环境变量配置地址
https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/myProject/388421841222342858/9249519184595931747?appId=5765880207854995971

  1. 设置环境变量值,并保存

  1. 效果

九、云函数-流量处理

1. 负载均衡

四种方式:
随机:产生随机数并通过取余的方法来判断最后调用哪个实例
轮询:按顺序依次调用
最少连接:多个实例中,选择请求量最小的实例进行调用
最短响应:多个实例中,选择响应时间最快的实例

2. 重试

当请求云函数超过设置的请求时间时,还想让该请求进行实例的访问,就可以设置重试
重试功能的三种策略:
zero:请求失败,立即发起重试,没有重试时间间隔
constant:请求失败,发起重试,可以设置重试时间间隔
jittered:请求失败,发起重试,可是设置重试时间间隔,间隔时间依次等差递增

3. 熔断

熔断:当开发函数熔断后,只要函数满足了熔断的某些条件后,该函数进不对外进行服务
熔断请求阈值:10s内请求次数大于设置的值,则开启熔断
熔断错误百分比阈值:10s内错误请求占比大于等于设置的值就会开发熔断
熔断时长:假设设置熔断时长为:10,则表示熔断10s后熔断状态就变为半熔断状态
半熔断状态:在该状态下,熔断器会尝试恢复服务调用方对服务的调用,允许部分请求可以调用该服务,当调用服务成功次数达到一定次数后,则可以关闭熔断。
目录
相关文章
|
5月前
|
监控 JavaScript 编译器
从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南
本文详解如何利用 hiAppEvent 监控并获取 sourcemap、debug so 等核心产物,剖析了 hstack 工具如何将混淆的 Native 与 ArkTS 堆栈还原为源码,助力开发者掌握异常分析方法,提升应用稳定性。
690 71
|
5月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
898 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
5月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
755 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
5月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
958 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
存储 缓存 5G
鸿蒙 HarmonyOS NEXT端云一体化开发-云存储篇
本文介绍用户登录后获取昵称、头像的方法,包括通过云端API和AppStorage两种方式,并实现上传头像至云存储及更新用户信息。同时解决图片缓存问题,添加上传进度提示,支持自动登录判断,提升用户体验。
275 1
|
5月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
284 0
|
6月前
|
传感器 监控 安全
HarmonyOS NEXT 5.0 的星闪(NearLink)开发应用案例
V哥分享HarmonyOS NEXT 5.0星闪开发实战,涵盖智能车钥匙无感解锁与工业传感器监控。低延迟、高可靠,代码完整,速来学习!
920 0
|
9月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
8月前
|
安全 JavaScript API
鸿蒙开发核心要素
鸿蒙开发核心要素
|
9月前
|
存储 IDE 定位技术
【HarmonyOS 5】鸿蒙组件&模板服务详解 - 助力高效开发的利器
在移动应用开发领域,效率与质量始终是开发者追求的核心目标。鸿蒙系统作为新兴的操作系统,为开发者提供了丰富且强大的开发资源,其中鸿蒙组件&模板服务更是成为开发者快速构建高质量应用的得力助手。
316 0

热门文章

最新文章