2月16日,DevEco Studio小助手在華為開發(fā)者論壇分享了DevEco Studio 3.1 Beta1版本發(fā)布信息,該版本與Harmony OS SDK 3.1.0 Developer Beta1版本配套,與HarmonyOS模擬器鏡像3.1.0 Developer Beta1版本配套,與OpenHarmony 3.2.10.6版本配套。該版本在Canary1基礎上新增了功能型特性和技能型特性,并解決了Canary1版本出現(xiàn)的一些問題。其中最具有代表的兩大特性為端云一體化開發(fā)和HarmonyOS 3.1 x86本地手機模擬器,接下來將對這兩個特性做詳細說明。
關于DevEco Studio安裝將不在過多的贅述,這里只說明一下多版本的安裝,在安裝向?qū)遁d以前版本界面不做勾選,直接點擊Next按鈕進行后續(xù)操作。
安裝完成后,在安裝目錄D:\\\\Huawei\\\\DevEco Studio 3.1.0.200\\\\bin
目錄下右鍵devecostudio64.exe
文件,發(fā)送到桌面快捷方式,以便于能夠快速打開。
由于官方保密協(xié)議限制,關于本地模擬器內(nèi)容暫不分享,請自行體驗
2 端云一體化
之前本人在OpenHarmony/HarmonyOS應用程序中集成了AppGallery Connect中的認證服務做應用程序的登錄入口,而HarmonyOS 3.1 Beta1更進一步提升了開發(fā)體驗,依托AppGakkery Connect的Serverless云服務開放接口,通過DevEco Studio的云開發(fā)能力,開發(fā)者可以在創(chuàng)建工程時通過選擇云開發(fā)模板,即可體驗端云一體化協(xié)同開發(fā),關于端云一體化詳細介紹可參見端云一體化開發(fā),這里關于概念性的不在贅述。
2.1 創(chuàng)建端云一體化示例應用
使用DevEco Studio創(chuàng)建端云一體化示例應用程序HelloCloud,選擇模板為Empty Ability with CloudDev。
端云一體化需要關聯(lián)云開發(fā)資源,需要在DevEco Studio中使用已實名認證的華為開發(fā)者賬號登錄。
登錄完成后在Team下拉框中選擇開發(fā)團隊,若提示以下錯誤信息,則說明未在AppGallery Connect中創(chuàng)建對應的應用,因此需要先去AppGallery Connect中創(chuàng)建對應的應用。點擊錯誤信息中的AppGallery Connect鏈接跳轉(zhuǎn)到創(chuàng)建應用界面。
首先添加一個項目,然后添加一個應用,配置如下:
在AppGallery Connect中創(chuàng)建應用完成后,回到DevEco Studio創(chuàng)建工程向?qū)?,工程向?qū)詣硬樵冊摻M織下,包名下的云端相匹配的應用信息。
HelloCloud工程創(chuàng)建完成后,在主界面Project頁簽中會顯示詳細工程目錄,包括端開發(fā)工程(Application)、云開發(fā)工程(CloudProgram)、端側(cè)公共庫(External Libraries)。
- 端開發(fā)工程主要用于開發(fā)應用端側(cè)業(yè)務代碼;
- 云開發(fā)工程主要用于為端側(cè)應用用到的云函數(shù)、云數(shù)據(jù)庫等。
- clouddb:云數(shù)據(jù)庫工程目錄
- cloudfunctions:云函數(shù)工程目錄
創(chuàng)建端云一體化應用程序并關聯(lián)云開發(fā)資源后,DevEco Studio會自動初始化配置并開啟云開發(fā)相關服務,如認證服務、云函數(shù)、云數(shù)據(jù)庫、云托管、API網(wǎng)關。服務開通狀態(tài)可在Event Log窗口查看,也可以在AppGallery Connect控制臺查看。
相較于我之前發(fā)布的集成AppGallery Connect認證服務實現(xiàn)登錄而言,端云一體化開發(fā)更加便捷,創(chuàng)建應用完成后會端側(cè)應用自動集成agconnect-services.json配置文件以及相關云服務最新版本HarmonyOS SDK,云端自動集成云數(shù)據(jù)庫SDK。
2.2 端云一體化開發(fā)體驗
使用端云一體化開發(fā),可以讓團隊協(xié)同開發(fā)更簡單,同時可以更大程度節(jié)省企業(yè)開發(fā)成本。接下來以云函數(shù)為例,更多請參見官網(wǎng)。
2.2.1 創(chuàng)建云函數(shù)
打開云端工程,在cloudfunctions
目錄右鍵選擇New --> Cloud Function
,輸入云函數(shù)名稱,自動生成ts文件。
云函數(shù)創(chuàng)建完成后需要在function-config.json
函數(shù)配置文件中配置觸發(fā)器(會自動完成HTTP觸發(fā)器配置),當前可配置HTTP、CLOUDDB、AUTH、CLOUDSTORAGE、CRON五種觸發(fā)器,每種觸發(fā)器配置規(guī)則不同。HTTP觸發(fā)器屬性如下所示:
參數(shù) | 說明 |
---|---|
type | 觸發(fā)器類型,配置為"http" |
enableUriDecode | 觸發(fā)器是否啟用decode。true:啟用;false:不啟用。 |
authFlag | 是否鑒權,默認為true。 |
authAlgor | 鑒權算法,默認為HDA-System。 |
authType | HTTP觸發(fā)器的認證類型。apigw-client:API客戶端鑒權(Client)端適用。cloudgw-client:API客戶端鑒權(Server端適用)。 |
在函數(shù)入口文件addition-test.ts
中完善函數(shù)業(yè)務邏輯。
// myHandler為入口方法名稱
// event 調(diào)用方法傳遞的事件對象,JSON格式
// context 函數(shù)運行時上下文對象,封裝了日志接口、回調(diào)接口、環(huán)境變量env對象等
// callback 事件處理結果
// logger 記錄日志
let myHandler = async function (event, context, callback, logger) {
// do something here
let res = new context.HTTPResponse({
"faas-content-type": "json"
}, "application/json", "200");
var body = {
code: 0,
message: "",
data: null
}
var _body = JSON.parse(event.body);
var username = _body.username;
var password = _body.password;
if (username !== 'admin') {
body.code = 10001;
body.message = "賬號不存在!";
} else if (username === 'admin' && password !== '123456') {
body.code = 10002;
body.message = "密碼錯誤!";
} else {
body.code = 200;
body.message = "登錄成功!";
body.data = {
username: username
}
}
res.body = body;
callback(res);
};
export { myHandler };
2.2.2 部署函數(shù)
完善函數(shù)代碼之后,可以將函數(shù)部署到AppGallery Connect控制臺,支持單個部署和批量部署。其中單個部署選中具體需要部署的函數(shù),批量部署則選中cloudfunctions
目錄,右鍵選擇Deploy Function
進行部署。
部署完成后,可在AppGallery Connect控制臺中云函數(shù)服務頁面查看。
2.2.3 編寫運行測試示例
在ets/services
目錄下編寫云函數(shù)回調(diào)方法:
// services/ArgAlgFunc.ts
import agconnect from '@hw-agconnect/api-ohos';
import "@hw-agconnect/function-ohos";
import { getAGConnect } from './AgcConfig';
export function login(context, reqBody: any): Promise<any> {
return new Promise((resolve, reject) => {
getAGConnect(context);
let functionResult;
let functionCallable = agconnect.function().wrap('argalg-$latest');
functionCallable.call(reqBody).then((ret: any) => {
functionResult = ret.getValue();
resolve(functionResult);
}).catch((error: any) => {
reject(error);
})
})
}
在ets/pages
目錄下構建調(diào)用云函數(shù)頁面:
import { login } from '../services/ArgAlgFunc';
import prompt from '@system.prompt';
@Entry
@Component
struct ArgAlg {
@State result: string = "";
@State username: string = "";
@State password: string = "";
getFunctionResult = () => {
let reqBody = {
"username": this.username,
"password": this.password
}
login(getContext(this), reqBody).then((ret) => {
this.result = JSON.stringify(ret)
if (ret.body.code === 200) {
prompt.showToast({
message: `登錄成功,當前賬號為:${ret.body.data.username}`,
duration: 5000
})
} else {
prompt.showToast({
message: `登錄失敗,原因為:${ret.body.message}`,
duration: 5000
})
}
}).catch((err) => {
this.result = JSON.stringify(err);
prompt.showToast({
message: `出現(xiàn)異常,原因為:${err}`,
duration: 5000
})
})
}
build() {
Column() {
TextInput({ placeholder: '請輸入用戶名'})
.fontSize(16).placeholderFont({ size: 16 })
.onChange((value: string) => {
this.username = value;
})
TextInput({ placeholder: '請輸入密碼'})
.fontSize(16).placeholderFont({ size: 16 })
.onChange((value: string) => {
this.password = value;
})
Button('登錄')
.width(200).height(54)
.fontSize(16)
.onClick(() => {
this.getFunctionResult();
})
Text(`Info: ${this.result}`).fontSize(16)
}
.width('100%').height('100%')
.padding({ top: 16 })
}
}
注:需要更改EntryAbility.ts
中onWindowStageCreate()
方法中初始加載頁面為pages/ArgAlg
。切記在調(diào)用云函數(shù)的時候,需要發(fā)布一個正式版本才能夠響應。
2.3 運行效果
審核編輯 黃宇
-
函數(shù)
+關注
關注
3文章
4327瀏覽量
62571 -
模擬器
+關注
關注
2文章
874瀏覽量
43208 -
云服務
+關注
關注
0文章
818瀏覽量
38908 -
HarmonyOS
+關注
關注
79文章
1973瀏覽量
30143 -
OpenHarmony
+關注
關注
25文章
3713瀏覽量
16254
發(fā)布評論請先 登錄
相關推薦
評論