2月16日,DevEco Studio小助手在華為開發者論壇分享了DevEco Studio 3.1 Beta1版本發布信息,該版本與Harmony OS SDK 3.1.0 Developer Beta1版本配套,與HarmonyOS模擬器鏡像3.1.0 Developer Beta1版本配套,與OpenHarmony 3.2.10.6版本配套。該版本在Canary1基礎上新增了功能型特性和技能型特性,并解決了Canary1版本出現的一些問題。其中最具有代表的兩大特性為端云一體化開發和HarmonyOS 3.1 x86本地手機模擬器,接下來將對這兩個特性做詳細說明。
關于DevEco Studio安裝將不在過多的贅述,這里只說明一下多版本的安裝,在安裝向導卸載以前版本界面不做勾選,直接點擊Next按鈕進行后續操作。
安裝完成后,在安裝目錄D:\\\\Huawei\\\\DevEco Studio 3.1.0.200\\\\bin
目錄下右鍵devecostudio64.exe
文件,發送到桌面快捷方式,以便于能夠快速打開。
由于官方保密協議限制,關于本地模擬器內容暫不分享,請自行體驗
2 端云一體化
之前本人在OpenHarmony/HarmonyOS應用程序中集成了AppGallery Connect中的認證服務做應用程序的登錄入口,而HarmonyOS 3.1 Beta1更進一步提升了開發體驗,依托AppGakkery Connect的Serverless云服務開放接口,通過DevEco Studio的云開發能力,開發者可以在創建工程時通過選擇云開發模板,即可體驗端云一體化協同開發,關于端云一體化詳細介紹可參見端云一體化開發,這里關于概念性的不在贅述。
2.1 創建端云一體化示例應用
使用DevEco Studio創建端云一體化示例應用程序HelloCloud,選擇模板為Empty Ability with CloudDev。
端云一體化需要關聯云開發資源,需要在DevEco Studio中使用已實名認證的華為開發者賬號登錄。
登錄完成后在Team下拉框中選擇開發團隊,若提示以下錯誤信息,則說明未在AppGallery Connect中創建對應的應用,因此需要先去AppGallery Connect中創建對應的應用。點擊錯誤信息中的AppGallery Connect鏈接跳轉到創建應用界面。
首先添加一個項目,然后添加一個應用,配置如下:
在AppGallery Connect中創建應用完成后,回到DevEco Studio創建工程向導,工程向導會自動查詢該組織下,包名下的云端相匹配的應用信息。
HelloCloud工程創建完成后,在主界面Project頁簽中會顯示詳細工程目錄,包括端開發工程(Application)、云開發工程(CloudProgram)、端側公共庫(External Libraries)。
- 端開發工程主要用于開發應用端側業務代碼;
- 云開發工程主要用于為端側應用用到的云函數、云數據庫等。
- clouddb:云數據庫工程目錄
- cloudfunctions:云函數工程目錄
創建端云一體化應用程序并關聯云開發資源后,DevEco Studio會自動初始化配置并開啟云開發相關服務,如認證服務、云函數、云數據庫、云托管、API網關。服務開通狀態可在Event Log窗口查看,也可以在AppGallery Connect控制臺查看。
相較于我之前發布的集成AppGallery Connect認證服務實現登錄而言,端云一體化開發更加便捷,創建應用完成后會端側應用自動集成agconnect-services.json配置文件以及相關云服務最新版本HarmonyOS SDK,云端自動集成云數據庫SDK。
2.2 端云一體化開發體驗
使用端云一體化開發,可以讓團隊協同開發更簡單,同時可以更大程度節省企業開發成本。接下來以云函數為例,更多請參見官網。
2.2.1 創建云函數
打開云端工程,在cloudfunctions
目錄右鍵選擇New --> Cloud Function
,輸入云函數名稱,自動生成ts文件。
云函數創建完成后需要在function-config.json
函數配置文件中配置觸發器(會自動完成HTTP觸發器配置),當前可配置HTTP、CLOUDDB、AUTH、CLOUDSTORAGE、CRON五種觸發器,每種觸發器配置規則不同。HTTP觸發器屬性如下所示:
參數 | 說明 |
---|---|
type | 觸發器類型,配置為"http" |
enableUriDecode | 觸發器是否啟用decode。true:啟用;false:不啟用。 |
authFlag | 是否鑒權,默認為true。 |
authAlgor | 鑒權算法,默認為HDA-System。 |
authType | HTTP觸發器的認證類型。apigw-client:API客戶端鑒權(Client)端適用。cloudgw-client:API客戶端鑒權(Server端適用)。 |
在函數入口文件addition-test.ts
中完善函數業務邏輯。
// myHandler為入口方法名稱
// event 調用方法傳遞的事件對象,JSON格式
// context 函數運行時上下文對象,封裝了日志接口、回調接口、環境變量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 部署函數
完善函數代碼之后,可以將函數部署到AppGallery Connect控制臺,支持單個部署和批量部署。其中單個部署選中具體需要部署的函數,批量部署則選中cloudfunctions
目錄,右鍵選擇Deploy Function
進行部署。
部署完成后,可在AppGallery Connect控制臺中云函數服務頁面查看。
2.2.3 編寫運行測試示例
在ets/services
目錄下編寫云函數回調方法:
// 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
目錄下構建調用云函數頁面:
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: `出現異常,原因為:${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
。切記在調用云函數的時候,需要發布一個正式版本才能夠響應。
2.3 運行效果
審核編輯 黃宇
-
函數
+關注
關注
3文章
4346瀏覽量
62967 -
模擬器
+關注
關注
2文章
881瀏覽量
43416 -
云服務
+關注
關注
0文章
835瀏覽量
39042 -
HarmonyOS
+關注
關注
79文章
1982瀏覽量
30567 -
OpenHarmony
+關注
關注
25文章
3744瀏覽量
16573
發布評論請先 登錄
相關推薦
評論