簡介
傳統(tǒng)的日志系統(tǒng)里匯聚了整個(gè)設(shè)備上所有程序運(yùn)行的過程流水日志,難以識(shí)別其中的關(guān)鍵信息。因此,應(yīng)用開發(fā)者需要一種數(shù)據(jù)打點(diǎn)機(jī)制,用來評(píng)估如訪問數(shù)、日活、用戶操作習(xí)慣以及影響用戶使用的關(guān)鍵因素等關(guān)鍵信息。
HiAppEvent是在系統(tǒng)層面為應(yīng)用開發(fā)者提供的一種事件打點(diǎn)機(jī)制,用于幫助應(yīng)用記錄在運(yùn)行過程中發(fā)生的故障信息、統(tǒng)計(jì)信息、安全信息、用戶行為信息,以支撐開發(fā)者分析應(yīng)用的運(yùn)行情況。
基本概念
- 打點(diǎn)
記錄由用戶操作引起的變化,提供業(yè)務(wù)數(shù)據(jù)信息,以供開發(fā)、產(chǎn)品、運(yùn)維分析。
事件設(shè)計(jì)規(guī)范
- 事件領(lǐng)域:用于標(biāo)識(shí)事件的領(lǐng)域,建議設(shè)置為業(yè)務(wù)模塊名稱,以便于區(qū)分不同的業(yè)務(wù)模塊。
- 事件名稱:用于指定事件的名稱,建議設(shè)置為具體的業(yè)務(wù)名稱,以便于描述實(shí)際的業(yè)務(wù)意義。
- 事件類型:用于指定事件的類型,支持以下四種類型事件:
- 行為事件:用于記錄用戶日常操作行為的事件,例如按鈕點(diǎn)擊、界面跳轉(zhuǎn)等行為。
- 故障事件:用于定位和分析應(yīng)用故障的事件,例如界面卡頓、掉網(wǎng)掉話等異常。
- 統(tǒng)計(jì)事件:用于統(tǒng)計(jì)和度量應(yīng)用關(guān)鍵行為的事件,例如對(duì)使用時(shí)長、訪問數(shù)等的統(tǒng)計(jì)。
- 安全事件:用于記錄涉及應(yīng)用安全行為的事件,例如密碼修改、用戶授權(quán)等行為。
- 事件參數(shù):用于指定事件的參數(shù),每個(gè)事件可以包含一組參數(shù),建議設(shè)置為事件屬性或事件發(fā)生上下文信息,以便于描述事件的詳細(xì)信息。
接口說明
應(yīng)用事件打點(diǎn)接口由hiAppEvent模塊提供。
打點(diǎn)接口功能介紹:
接口名 | 描述 |
---|---|
write(AppEventInfo info, AsyncCallback callback): void | 應(yīng)用事件異步打點(diǎn)方法,使用callback方式作為異步回調(diào)。 |
write(AppEventInfo info): Promise | 應(yīng)用事件異步打點(diǎn)方法,使用Promise方式作為異步回調(diào)。 |
訂閱接口功能介紹:
接口名 | 描述 |
---|---|
addWatcher(Watcher watcher): AppEventPackageHolder | 添加應(yīng)用事件觀察者,以添加對(duì)應(yīng)用事件的訂閱。 |
removeWatcher(Watcher watcher): void | 移除應(yīng)用事件觀察者,以移除對(duì)應(yīng)用事件的訂閱。 |
鴻蒙OS開發(fā) | 更多內(nèi)容↓點(diǎn)擊 | HarmonyOS與OpenHarmony技術(shù) |
---|---|---|
鴻蒙技術(shù)文檔 | 開發(fā)知識(shí)更新庫gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md 在這。 |
開發(fā)步驟
更多鴻蒙開發(fā)文檔mau123789是v添加后免費(fèi)領(lǐng)取。
以實(shí)現(xiàn)對(duì)用戶點(diǎn)擊按鈕行為的事件打點(diǎn)及訂閱為例,說明開發(fā)步驟。
- 新建一個(gè)ArkTS應(yīng)用工程,編輯工程中的“entry > src > main > ets > entryability > EntryAbility.ts” 文件,在onCreate函數(shù)中添加對(duì)用戶點(diǎn)擊按鈕事件的訂閱,完整示例代碼如下:
import hilog from '@ohos.hilog'; import UIAbility from '@ohos.app.ability.UIAbility'; import Window from '@ohos.window' import hiAppEvent from '@ohos.hiviewdfx.hiAppEvent' export default class EntryAbility extends UIAbility { onCreate(want, launchParam) { hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); hilog.info(0x0000, 'testTag', '%{public}s', 'want param:' + JSON.stringify(want) ?? ''); hilog.info(0x0000, 'testTag', '%{public}s', 'launchParam:' + JSON.stringify(launchParam) ?? ''); hiAppEvent.addWatcher({ // 開發(fā)者可以自定義觀察者名稱,系統(tǒng)會(huì)使用名稱來標(biāo)識(shí)不同的觀察者 name: "watcher1", // 開發(fā)者可以訂閱感興趣的應(yīng)用事件,此處是訂閱了按鈕事件 appEventFilters: [{ domain: "button" }], // 開發(fā)者可以設(shè)置訂閱回調(diào)觸發(fā)的條件,此處是設(shè)置為事件打點(diǎn)數(shù)量滿足1個(gè) triggerCondition: { row: 1 }, // 開發(fā)者可以自行實(shí)現(xiàn)訂閱回調(diào)函數(shù),以便對(duì)訂閱獲取到的事件打點(diǎn)數(shù)據(jù)進(jìn)行自定義處理 onTrigger: function (curRow, curSize, holder) { // 返回的holder對(duì)象為null,表示訂閱過程發(fā)生異常,因此在記錄錯(cuò)誤日志后直接返回 if (holder == null) { hilog.error(0x0000, 'testTag', "HiAppEvent holder is null") return } let eventPkg = null // 根據(jù)設(shè)置閾值大小(默認(rèn)為512KB)去獲取訂閱事件包,直到將訂閱數(shù)據(jù)全部取出 // 返回的事件包對(duì)象為null,表示當(dāng)前訂閱數(shù)據(jù)已被全部取出,此次訂閱回調(diào)觸發(fā)結(jié)束 while ((eventPkg = holder.takeNext()) != null) { // 開發(fā)者可以對(duì)事件包中的事件打點(diǎn)數(shù)據(jù)進(jìn)行自定義處理,此處是將事件打點(diǎn)數(shù)據(jù)打印在日志中 hilog.info(0x0000, 'testTag', `HiAppEvent eventPkg.packageId=%{public}d`, eventPkg.packageId) hilog.info(0x0000, 'testTag', `HiAppEvent eventPkg.row=%{public}d`, eventPkg.row) hilog.info(0x0000, 'testTag', `HiAppEvent eventPkg.size=%{public}d`, eventPkg.size) for (const eventInfo of eventPkg.data) { hilog.info(0x0000, 'testTag', `HiAppEvent eventPkg.info=%{public}s`, eventInfo) } } } }) } }
- 編輯工程中的“entry > src > main > ets > pages > Index.ets” 文件,添加一個(gè)按鈕并在其onClick函數(shù)中進(jìn)行事件打點(diǎn),以記錄按鈕點(diǎn)擊事件,完整示例代碼如下:
import hiAppEvent from '@ohos.hiviewdfx.hiAppEvent' import hilog from '@ohos.hilog' @Entry @Component struct Index { @State message: string = 'Hello World' build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) Button("writeTest").onClick(()= >{ // 在按鈕點(diǎn)擊函數(shù)中進(jìn)行事件打點(diǎn),以記錄按鈕點(diǎn)擊事件 hiAppEvent.write({ // 事件領(lǐng)域定義 domain: "button", // 事件名稱定義 name: "click", // 事件類型定義 eventType: hiAppEvent.EventType.BEHAVIOR, // 事件參數(shù)定義 params: { click_time: 100 } }).then(() = > { hilog.info(0x0000, 'testTag', `HiAppEvent success to write event`) }).catch((err) = > { hilog.error(0x0000, 'testTag', `HiAppEvent err.code: ${err.code}, err.message: ${err.message}`) }) }) } .width('100%') } .height('100%') } }
- 點(diǎn)擊IDE界面中的運(yùn)行按鈕,運(yùn)行應(yīng)用工程,然后在應(yīng)用界面中點(diǎn)擊按鈕“writeTest”,觸發(fā)一次按鈕點(diǎn)擊事件打點(diǎn)。
- 最終,可以在Log窗口看到按鈕點(diǎn)擊事件打點(diǎn)成功的日志,以及觸發(fā)訂閱回調(diào)后對(duì)打點(diǎn)事件數(shù)據(jù)的處理日志:
HiAppEvent success to write event HiAppEvent eventPkg.packageId=0 HiAppEvent eventPkg.row=1 HiAppEvent eventPkg.size=124 HiAppEvent eventPkg.info={"domain_":"button","name_":"click","type_":4,"time_":1670268234523,"tz_":"+0800","pid_":3295,"tid_":3309,"click_time":100}
審核編輯 黃宇
-
HarmonyOS
+關(guān)注
關(guān)注
79文章
1982瀏覽量
30579 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3747瀏覽量
16589 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
190瀏覽量
4538
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論