HarmonyOS--AGC(认证服务/云函数/云存储/云数据库)

news2024/11/14 13:42:35

HarmonyOS–AGC(认证服务/云函数/云存储/云数据库)

文章目录

  • 一、注册华为账号开通认证服务
  • 二、添加项目:*包名要与项目的包名保持一致
  • 三、获取需要的文件
  • 四、创建项目:*包名要与项目的包名保持一致
  • 五、添加json文件
  • 六、加入请求权限
  • 七、加入依赖
  • 八、修改构建配置文件:`build-profile.json5`
  • 九、集成SDK
  • 十、手机号认证--工具包
  • 十一、邮箱认证--工具包
  • 十二、匿名认证--工具包
  • 十三、认证服务FAQ
  • 十四、云函数


一、注册华为账号开通认证服务

在这里插入图片描述

二、添加项目:*包名要与项目的包名保持一致

在这里插入图片描述

三、获取需要的文件

在这里插入图片描述

四、创建项目:*包名要与项目的包名保持一致

五、添加json文件

在这里插入图片描述

六、加入请求权限

在module.json5文件中添加:"requestPermissions": [{"name": "ohos.permission.INTERNET"}],

在这里插入图片描述

七、加入依赖

// 这三类可以整合为一个,统一使用这几个依赖

"dependencies": {
    "@hw-agconnect/hmcore": "^1.0.1",
    "@hw-agconnect/cloud": "^1.0.1",
    "@hw-agconnect/auth-ohos": "^1.1.3"
  }

// 下面的是端云项目依赖使用的
"dependencies": {
    "@hw-agconnect/crypto-ohos": "^1.0.10",
    "@hw-agconnect/function-ohos": "^1.0.10",
    "@hw-agconnect/auth-ohos": "^1.0.10",
    "@hw-agconnect/cloudstorage-ohos": "^1.0.10",
    "@hw-agconnect/api-ohos": "^1.0.10",
    "@hw-agconnect/base-ohos": "^1.0.10",
    "@hw-agconnect/core-ohos": "^1.0.10",
    "@hw-agconnect/credential-ohos": "^1.0.10",
    "@ohos/agconnect-auth-component": "^1.0.5",
    "@hw-agconnect/auth-component": "^1.0.0",
    "@hw-agconnect/cloud": "^1.0.0",
    "@hw-agconnect/hmcore": "^1.0.0",
    "long": "5.2.1"
      }

// 云函数使用
  "dependencies": {
    "@hw-agconnect/api-ohos": "^1.1.2",
    "@hw-agconnect/core-ohos": "^1.1.2",
    "@hw-agconnect/function-ohos": "^1.1.2",
    "@hw-agconnect/credential-ohos": "^1.1.2",
    "@hw-agconnect/base-ohos": "^1.1.2",
    "@hw-agconnect/cloud": "^1.0.0",
    "@hw-agconnect/hmcore": "^1.0.1"
  }

在这里插入图片描述

八、修改构建配置文件:build-profile.json5

在这里插入图片描述

{
  "apiType": "stageMode",
  "showInServiceCenter": true, // 新添加
  "buildOption": { // 新添加:内容
    //配置筛选har依赖.so资源文件的过滤规则
    "napiLibFilterOption": {
      //按照.so文件的优先级顺序,打包最高优先级的.so文件
      "pickFirsts": [
        "**/1.so"
      ],
      //按照.so文件的优先级顺序,打包最低优先级的.so 文件
      "pickLasts": [
        "**/2.so"
      ],
      //排除的.so文件
      "excludes": [
        "**/3.so"
      ],
      //允许当.so重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件
      "enableOverride": true,
    }
  },
  "buildOptionSet": [
    {
      "name": "release",
      "arkOptions": {
        "obfuscation": {
          "ruleOptions": {
            "enable": false,
            "files": [
              "./obfuscation-rules.txt"
            ]
          }
        }
      }
    },
  ],
  "targets": [
    {
      "name": "default"
    },
    {
      "name": "ohosTest",
    }
  ]
}

九、集成SDK

导包:
import { initialize } from '@hw-agconnect/hmcore';

在这里插入图片描述

// 方式一(不推荐)
导包: import { initialize } from '@hw-agconnect/hmcore';
async  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
     // 根据管理读取文件,根据信息读取里面的数据
    try {
      let input = await this.context.resourceManager
        .getRawFileContent('agconnect-services.json')
      let jsonString = util.TextDecoder.create('utf-8',
        {
          ignoreBOM: true
        }).decodeWithStream(input, {
        stream: false
      });
      initialize(this.context, JSON.parse(jsonString));
      console.info('system===>SDK集成成功')
    } catch (e) {
      console.info('system===>SDK集成失败')
      hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
    }
  }

方式二: // 直接获取json 文件
导包: import { initialize } from '@hw-agconnect/hmcore';
import  json from '../../resources/rawfile/agconnect-services.json'
  onCreate(want, launchParam) {
    // 方式二:引入
    try {
      initialize(this.context,json );
      console.info('system===>SDK集成成功')
    } catch (err){
      console.info('system===>SDK集成失败')
    }
    }

十、手机号认证–工具包

import cloud, { AuthUser, SignInResult, VerifyCodeAction, VerifyCodeResult } from '@hw-agconnect/cloud';
// 手机验证
// class PhoneAgcUtils.ets
/**
 * 获取当前登录用户
 * */
export function getCurrentUser(): Promise<AuthUser | null> {
  return cloud.auth().getCurrentUser()
}

/*
 * 获取验证码(登录设置使用,并需要传参使用)
 * REGISTER_LOGIN: 登录相关使用
 * RESET_PASSWORD: 修改密码相关使用
 * */
export function phoneGetVerifyCode(action: VerifyCodeAction, phoneNumber: string): Promise<VerifyCodeResult> {
  return cloud.auth().requestVerifyCode({
    action: action,
    lang: `zh_CN`,
    sendInterval: 60,
    verifyCodeType: {
      phoneNumber: phoneNumber,
      countryCode: '86',
      kind: `phone`
    }
  })
}


/*
 * 验证码登录
 * */
export async function phoneSignInByVerifyCode(phoneNumber: string, verifyCode: string, autoCreateUser: boolean = false): Promise<SignInResult> {
  // 登录之前要先登出
  await logOut()
  return cloud.auth().signIn({
    autoCreateUser: autoCreateUser, // 自己创建用户
    credentialInfo: {
      kind: 'phone',
      countryCode: '86', // 区号
      phoneNumber: phoneNumber,
      verifyCode: verifyCode
    }
  })
}


/*
 * 密码登录
 * */
export async function phoneSignInByPassWord(phoneNumber: string, password: string, autoCreateUser: boolean = false): Promise<SignInResult> {
  // 登录之前要先登出
  await logOut()
  return cloud.auth().signIn({
    autoCreateUser: autoCreateUser, // 自己创建用户
    credentialInfo: {
      kind: 'phone',
      countryCode: '86', // 区号
      phoneNumber: phoneNumber,
      password: password
    }
  })
}


/*
 * 验证码和密码登录(全填)
 * */
export async function phoneSignIn(phoneNumber: string, password: string, verifyCode: string, autoCreateUser: boolean = false): Promise<SignInResult> {
  // 登录之前要先登出
  await logOut()
  return cloud.auth().signIn({
    autoCreateUser: autoCreateUser, // 自己创建用户
    credentialInfo: {
      kind: 'phone',
      countryCode: '86', // 区号
      phoneNumber: phoneNumber,
      password: password,
      verifyCode: verifyCode
    }
  })
}


/*
 * 注册用户
 * */
export function phoneCreateUser(phoneNumber: string, password: string, verifyCode: string): Promise<SignInResult> {
  return cloud.auth().createUser({
    kind: 'phone',
    phoneNumber: phoneNumber, // 手机号
    countryCode: '86',
    password: password, // 确认密码
    verifyCode: verifyCode // 验证码
  })
}


/*
 * 修改密码
 * 其中user: cloud.auth().getCurrentUser()的结果
 * */
export function phoneUpdatePassword(user: AuthUser, password: string, verifyCode: string): Promise<void> {
  return user.updatePassword(
    {
      password: password,
      providerType: 'phone',
      verifyCode: verifyCode
    })
}


/*
 * 重置密码/忘记密码
 * */
export function phoneResetPassword(phoneNumber: string, password: string, verifyCode: string): Promise<void> {
  return cloud.auth().resetPassword({
    kind: 'phone',
    countryCode: '86',
    phoneNumber: phoneNumber,
    password: password,
    verifyCode: verifyCode
  })
}

/*
 * 登出
 * */
export function logOut(): Promise<void> {
  return cloud.auth().signOut()
}


/**
 * 销户
 */
export function deleteUser(): Promise<void> {
  return cloud.auth().deleteUser()
}

/**
 * 修改手机号
 */
export function phoneUpdatePhone(user: AuthUser, newPhone: string, newVerifyCode: string): Promise<void> {
  return user.updatePhone({
    phoneNumber: newPhone,
    countryCode: '86',
    verifyCode: newVerifyCode,
    lang: 'zh_CN'
  })
}

/**
 * 账号重认证(密码认证)
 * 报:203818081 则需要重认证
 */
export function phoneUserReauthenticateByPassWord(user: AuthUser, passWord: string): Promise<SignInResult> {
  return user.userReauthenticate({
    credentialInfo: {
      kind: 'phone',
      countryCode: '86',
      phoneNumber: user.getPhone().replace('+86-', ''),
      password: passWord
      // verifyCode?: string;
    }
  })
}


/**
 * 账号重认证(验证码认证)
 * 报:203818081 则需要重认证
 */
export function phoneUserReauthenticateByVerifyCode(user: AuthUser, verifyCode: string): Promise<SignInResult> {
  return user.userReauthenticate({
    credentialInfo: {
      kind: 'phone',
      countryCode: '86',
      phoneNumber: user.getPhone().replace('+86-', ''),
      // password: passWord
      verifyCode: verifyCode
    }
  })
}

/**
 * 账号重认证(全)
 * 报:203818081 则需要重认证
 */
export function phoneUserReauthenticateByAll(user: AuthUser, passWord: string, verifyCode: string): Promise<SignInResult> {
  return user.userReauthenticate({
    credentialInfo: {
      kind: 'phone',
      countryCode: '86',
      phoneNumber: user.getPhone().replace('+86-', ''),
      password: passWord,
      verifyCode: verifyCode
    }
  })
}



/**
 * 匿名/手机关联邮箱(验证码方式)
 * 可以使用密码--暂未封装函数
 * 关联用户或取消关联都必须限定时间在5分钟以内,超时需重新登录或重认证
 *
 * 手机不可以关联手机
 * 匿名也是转为实名的操作
 */
export function phoneLink(authUser: AuthUser,email:string,emailVerifyCode:string):Promise<SignInResult> {
  return authUser.link({
    kind: 'email',
    // password: password, // 给这个关联设置的登录密码
    email: email,
    verifyCode: emailVerifyCode
  })
}

/**
 * 手机取消关联邮箱
 * 关联用户或取消关联都必须限定时间在5分钟以内,超时需重新登录或重认证
 */
export function phoneUnLink(authUser: AuthUser):Promise<SignInResult> {
  return authUser.unlink('email')
}


/***
 * 匿名登录
 */
export function anonymous(): Promise<SignInResult> {
  return cloud.auth().signInAnonymously()
}

//提示信息
export function messageInfo(string: string) {
  console.info('system===>', string)
}

export function messageError(string: string) {
  console.error('system===>', string)
}

十一、邮箱认证–工具包

import cloud, { AuthUser, SignInResult, VerifyCodeAction, VerifyCodeResult } from '@hw-agconnect/cloud';
// 邮箱验证
// class EmailAgcUtils.ets
/**
 * 获取当前登录用户
 * */
export function getCurrentUser(): Promise<AuthUser | null> {
  return cloud.auth().getCurrentUser()
}

/*
 * 获取验证码(登录设置使用,并需要传参使用)
 * REGISTER_LOGIN: 登录相关使用/注册
 * RESET_PASSWORD: 修改密码相关使用
 * */
export function emailGetVerifyCode(action: VerifyCodeAction, email: string): Promise<VerifyCodeResult> {
  return cloud.auth().requestVerifyCode({
    action: action,
    lang: `zh_CN`,
    sendInterval: 60,
    verifyCodeType: {
      kind: 'email',
      email: email
    }
  })
}

/*
 * 验证码登录
 * */
export async function emailSignInByVerifyCode(email: string, verifyCode: string, autoCreateUser: boolean = false): Promise<SignInResult> {
  // 登录之前要先登出
  await logOut()
  return cloud.auth().signIn({
    autoCreateUser: autoCreateUser, // 自己创建用户
    credentialInfo: {
      kind: 'email',
      email: email,
      verifyCode: verifyCode
    }
  })
}


/*
 * 密码登录
 * */
export async function emailSignInByPassWord(email: string, password: string, autoCreateUser: boolean = false): Promise<SignInResult> {
  // 登录之前要先登出
  await logOut()
  return cloud.auth().signIn({
    autoCreateUser: autoCreateUser, // 自己创建用户
    credentialInfo: {
      kind: 'email',
      email: email,
      password: password
    }
  })
}


/*
 * 验证码和密码登录(全填)
 * */
export async function emailSignIn(email: string, password: string, verifyCode: string, autoCreateUser: boolean = false): Promise<SignInResult> {
  // 登录之前要先登出
  await logOut()
  return cloud.auth().signIn({
    autoCreateUser: autoCreateUser, // 自己创建用户
    credentialInfo: {
      kind: 'email',
      email: email,
      password: password,
      verifyCode: verifyCode
    }
  })
}


/*
 * 注册用户
 * */
export function emailUCreateUser(email: string, password: string, verifyCode: string): Promise<SignInResult> {
  return cloud.auth().createUser({
    kind: 'email',
    email: email,
    password: password, // 确认密码
    verifyCode: verifyCode // 验证码
  })
}


/*
 * 修改密码
 * 其中user: cloud.auth().getCurrentUser()的结果
 * */
export function emailUpdatePassword(user: AuthUser, password: string, verifyCode: string): Promise<void> {
  return user.updatePassword(
    {
      password: password,
      providerType: 'email',
      verifyCode: verifyCode
    })
}


/*
 * 重置密码/忘记密码
 * */
export function emailUResetPassword(email: string, password: string, verifyCode: string): Promise<void> {
  return cloud.auth().resetPassword({
    kind: 'email',
    email: email,
    password: password,
    verifyCode: verifyCode
  })
}


/*
 * 登出
 * */
export function logOut(): Promise<void> {
  return cloud.auth().signOut()
}


/**
 * 销户
 */
export function deleteUser(): Promise<void> {
  return cloud.auth().deleteUser()
}

/**
 * 修改邮箱
 */
export function emailUpdateEmail(user: AuthUser, newEmail: string, newVerifyCode: string): Promise<void> {
  return user.updateEmail({
    email: newEmail,
    verifyCode: newVerifyCode,
    lang: 'zh_CN'
  })
}

/**
 * 账号重认证(密码认证)
 */
export function emailUserReauthenticateByPassWord(user: AuthUser, passWord: string): Promise<SignInResult> {
  return user.userReauthenticate({
    credentialInfo: {
      kind: 'email',
      email: user.getEmail(),
      password: passWord
      // verifyCode?: string;
    }
  })
}


/**
 * 账号重认证(验证码认证)
 */
export function emailUserReauthenticateByVerifyCode(user: AuthUser, verifyCode: string): Promise<SignInResult> {
  return user.userReauthenticate({
    credentialInfo: {
      kind: 'email',
      email: user.getEmail(),
      // password: passWord
      verifyCode: verifyCode
    }
  })
}

/**
 * 账号重认证(全)
 */
export function emailUserReauthenticateByAll(user: AuthUser, passWord: string, verifyCode: string): Promise<SignInResult> {
  return user.userReauthenticate({
    credentialInfo: {
      kind: 'email',
      email: user.getEmail(),
      password: passWord,
      verifyCode: verifyCode
    }
  })
}

/**
 *匿名/邮箱关联手机(验证码方式)
 * 可以使用密码--暂未封装函数
 *
 * 邮箱不可以关联邮箱
 * 匿名也是转为实名的操作
 */
export function emailLink(authUser: AuthUser,phoneNumber:string,phoneVerifyCode:string):Promise<SignInResult> {
  return authUser.link({
    kind: 'phone',
    countryCode: '86',
    phoneNumber: phoneNumber,
    // password?: string; // 给这个关联设置的登录密码
    verifyCode:phoneVerifyCode
  })
}

/**
 * 邮箱取消关联手机
 */
export function emailUnLink(authUser: AuthUser):Promise<SignInResult> {
  return authUser.unlink('phone')
}

//提示信息
export function messageEmailInfo(string: string) {
  console.info('system===>', string)
}

export function messageEmailError(string: string) {
  console.error('system===>', string)
}

十二、匿名认证–工具包

/***
 * 匿名登录
 */
export function anonymous(): Promise<SignInResult> {
  return cloud.auth().signInAnonymously()
}

十三、认证服务FAQ

问题:{"code":203817988,"message":"third provider is disabled"}
查看服务配置,相关验证是否启动。

在这里插入图片描述

······················································ ······················································ ······················································ ······················································ ······················································ ······················································ ······················································ ······················································

十四、云函数

操作步骤

1.AGC中开启云函数
2.创建函数
3.在函数代码---代码文件中编辑并提交,格式见图片:(注意判断)
4.在IDE工具中进行调用此方法,见代码:在开发前要准备环境(认证服务一致):
		1.json文件的导入
		2.依赖
		3.构建文件
		4.集成SDK

在这里插入图片描述

在这里插入图片描述

导包:import cloud from '@hw-agconnect/cloud'
  async fun_sum() {
    const rep = await cloud.callFunction({
      name: 'fun-jisuan',  // 函数名
      version: '$latest', // 版本
      params: { // 参数
        "num1": 3,
        "num2": 3
      }
    })
    console.log('hmlog-->', JSON.stringify(rep.getValue()))
    this.result1 = rep.getValue().result + '';
  }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Openai api via azure error: NotFoundError: 404 Resource not found

题意&#xff1a;"OpenAI API通过Azure出错&#xff1a;NotFoundError: 404 找不到资源" 问题背景&#xff1a; thanks to the university account my team and I were able to get openai credits through microsoft azure. The problem is that now, trying to us…

VS2022搭建QT及OpenCV环境

1.背景 由于之前VS2022和QT已经安装好了&#xff0c;所以本次的任务主要是下载OpenCV以及在VS2022上集成QT和OpenCV。关于VS2022和QT的安装大家可以参考别的博客。QT选择的版本是6.2.4&#xff0c;OpenCV版本为3.4.5&#xff0c;Windows版本为Win11。 2.OpenCV下载 OpenCV官…

《黑神话:深度探索与攻略指南》——虎先锋隐藏门在哪里

在《黑神话悟空》这款扣人心弦的游戏中&#xff0c;探索隐藏区域和发现秘密宝箱是许多玩家的乐趣所在。特别是戌狗地窖中那个神秘的宝箱&#xff0c;它不仅藏有泡酒物虎舍利等珍贵道具&#xff0c;更是对玩家探索能力的一次考验。然而&#xff0c;不少玩家在寻找虎先锋隐藏门时…

raksmart机云大宽带服务器托管服务内容

RakSmart是一家提供全球数据中心服务的公司&#xff0c;其业务范围涵盖了服务器托管、专用服务器租赁、云服务等多个领域。其中&#xff0c;机柜大带宽服务器托管服务是其特色之一&#xff0c;特别适合那些需要大量带宽资源的企业级客户。下面我们将详细介绍RakSmart的机柜大带…

windows系统安装配置Apache Maven

Date: 2024.07.17 09:45:10 author: lijianzhan 电脑环境: win10系统 Java开发环境: JDK21 Mvn : apache-maven-3.9.9 maven下载地址: https://maven.apache.org/download.cgi 点击链接进入Apache Maven官网&#xff0c;选择apache-maven-3.9.9-bin.zip进行下载。 下载maven…

ecmascript和javascript的区别详细讲解

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; ECMAScript 和 JavaScript 是密切相关的两个概念&#xff0c;但它们在本质上有所区别。以下是对它们的详细介绍和区别分析。 一、概念定义 1. JavaScript 的定义 JavaScript 是一种基于原型的动态脚本语…

【hot100篇-python刷题记录】【最长连续序列】

R7-哈希篇 思路&#xff1a;sort一下先 然后使用双指针遍历计数&#xff0c;同时从数组头开始。 按照题目的意思&#xff0c;相同元素只能取一个&#xff0c;所以可以用set class Solution:def longestConsecutive(self, nums: List[int]) -> int:if len(nums)<1:retu…

开放式耳机的优缺点?五款绝佳王炸顶级力荐!

在运动过程中&#xff0c;我们往往会选择听音乐来提升运动表现&#xff0c;但是在专注音乐和运动时&#xff0c;又很容易忽略了周围的环境&#xff0c;导致运动意外的发生。所以开放式蓝牙耳机的兴起&#xff0c;深受大家的喜爱&#xff0c;尤其是运动爱好者和音乐爱好者&#…

【C++】OJ习题 篇2

&#x1f680;个人主页&#xff1a;奋斗的小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 &#x1f4a5;1、删除有序数组中的重复项&#x1f4a5;2、数组中出现次数超过一半的数字&#x1f4a5;3、最…

【js逆向专题】2.浏览器调试技巧

小节目标: 熟悉 开发者工具的使用熟悉 代码断点的方式熟悉 网页debugger实现方式 一. 浏览器开发者工具 1. element元素面板 展示浏览器渲染之后的页面 2. network网络面板 浏览器请求的数据都会加载在网络面板 3. console控制台面板 可以在控制台调试你对应的代码 4.…

Call openai-node in the backend or call https in the frontend?

题意&#xff1a;在后端调用 openai-node 还是在前端调用 https&#xff1f; 问题背景&#xff1a; I have a web application by ReactJS and Nodejs. This application calls OpenAI APIs. 我有一个使用 ReactJS 和 Node.js 开发的 Web 应用程序。这个应用程序调用 OpenAI …

分享几个简单的Pandas数据处理函数

文末赠免费精品编程资料~~ 大家好&#xff0c;今天给大家简单分享几个好用的Pandas数据处理函数。 id,category,sub_category,sales,year,var1,var2,age,score,status,quantity 1,A,B,100,2019,50,70,35,85,active,100 2,B,C,120,2020,60,80,28,90,inactive,200 3,A,C,110,20…

RTX5源码全家桶集成emWin6.40, Modbus主从,含FreeRTOS版, 探讨一种移植第3方组件通用方法以及使用注意事项2024-08-30

视频&#xff1a; https://www.bilibili.com/video/BV1tFHuenESf RTX5源码全家桶集成emWin6.40, Modbus主从&#xff0c;含FreeRTOS版, 探讨一种移植第3方组件的通用方法以及多任务使用注意事项 提纲&#xff1a; 参考资料: 1、例程下载 RTX5 All In One(2024-08-30 V2.0).7…

计算机毕业设计选题推荐-高校实验室教学管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

RNN及其变体

RNN及其变体 RNN模型定义 循环神经网络:一般接受的一序列进行输入,输出也是一个序列 作用和应用场景: RNN擅长处理连续语言文本,机器翻译,文本生成,文本分类,摘要生成 RNN模型的分类 根据输入与输出结构 N Vs N : 输入和输出等长,应用场景:对联生…

利用 ChatGPT 快速将界面原型转换为 Vue 代码实现

在现代前端开发中&#xff0c;快速、高效地将设计原型转化为实际可运行的代码是开发人员追求的目标。借助 ChatGPT&#xff0c;这一过程可以显著加速。本文将展示如何通过 ChatGPT 辅助开发&#xff0c;将基于 iView 框架的界面原型在短短 2~3 分钟内转换为 Vue 代码&#xff0…

影视会员充值API接口如何开发?

影视会员充值 API 接口的开发流程 需求分析 明确接口的功能需求、性能要求和安全标准等 设计规划 确定接口的架构、数据格式、交互方式等 技术选型 选择适合的开发语言、框架和数据库等 编码实现 按照设计进行代码编写和功能实现 测试优化 进行单元测试、集成测试、压力测…

黄力医生谈健康:掌握这几个秘诀,帮你远离冠心病困扰!

随着生活水平的提高&#xff0c;人们的饮食结构和生活习惯发生了显著变化&#xff0c;这使得冠心病的患病率呈现出逐年上升的趋势&#xff0c;且发病年龄也越来越年轻化。面对这一严峻的健康挑战&#xff0c;提高对冠心病的认识&#xff0c;及早进行干预显得尤为重要。今天&…

【鬼灭之刃学英语 立志篇】2、义勇对炭治郎的怒斥

义勇对炭治郎的怒斥 1、不要卑躬屈膝2、脆弱的3、与现在事实相反的虚拟语气4、像你这样的弱者5、别开玩笑了6、弱者没有权利7、无情地被强者碾压8、知道做某事的方法9、尊重意愿10、这就是现实11、那就是你做某事的方式吗12、你为什么不...13、是...导致...1x、本可以做某事 1、…

OpenCV绘图函数(11)计算文本字符串在特定字体、尺寸和厚度下的大小的函数getTextSize()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算一个文本字符串的宽度和高度。 函数 cv::getTextSize 计算并返回包含指定文本的矩形框的尺寸。也就是说&#xff0c;下面的代码渲染一些文本…