应用事件打点-统计某个页面浏览时长

应用事件打点-统计某个页面浏览时长

HarmonyOS
2024-05-28 21:08:42
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
p3586

HiAppEvent是在系统层面为应用开发者提供的一种事件打点机制,用于帮助应用记录在运行过程中发生的故障信息、统计信息、安全信息、用户行为信息,以支撑开发者分析应用的运行情况。本demo展示一下用应用事件打点来统计某个页面浏览时长。

核心代码解释

hiAppEvent.addWatcher添加应用事件观察者方法,可用于订阅应用事件。

hiAppEventFun函数在页面关闭时进行事件打点,以记录用户浏览时间。

核心代码如下:

添加应用事件观察者方法:

//EntryAbility.ets 
hiAppEvent.addWatcher({ 
  // 开发者可以自定义观察者名称,系统会使用名称来标识不同的观察者 
  name: "watcher1", 
  // 开发者可以订阅感兴趣的应用事件,此处是订阅了按钮事件 
  appEventFilters: [{ domain: "close" }], 
  // 开发者可以设置订阅回调触发的条件,此处是设置为事件打点数量满足1个 
  triggerCondition: { row: 1 }, 
  // 开发者可以自行实现订阅回调函数,以便对订阅获取到的事件打点数据进行自定义处理 
  onTrigger: (curRow: number, curSize: number, holder: hiAppEvent.AppEventPackageHolder) => { 
    // 返回的holder对象为null,表示订阅过程发生异常,因此在记录错误日志后直接返回 
    if (holder == null) { 
      hilog.error(0x0000, 'testTag', "HiAppEvent holder is null"); 
      return; 
    } 
    hilog.info(0x0000, 'testTag', `HiAppEvent onTrigger: curRow=%{public}d, curSize=%{public}d`, curRow, curSize); 
    let eventPkg: hiAppEvent.AppEventPackage | null = null; 
    // 根据设置阈值大小(默认为512KB)去获取订阅事件包,直到将订阅数据全部取出 
    // 返回的事件包对象为null,表示当前订阅数据已被全部取出,此次订阅回调触发结束 
    while ((eventPkg = holder.takeNext()) != null) { 
 
      // 开发者可以对事件包中的事件打点数据进行自定义处理,此处是将事件打点数据打印在日志中 
      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); 
      } 
    } 
  } 
});

hiAppEventFun函数在页面关闭时进行事件打点:

//hiAppEventFun.ets 
export function hiAppEventFun(pageName: string, time: number): void{ 
 
  // 在页面关闭时进行事件打点,以记录用户浏览时间 
  let eventParams: Record<string, number> = { 'click_time': 100 }; 
  let eventInfo: hiAppEvent.AppEventInfo = { 
    // 事件领域定义----打开页面 
    domain: "close", 
    // 事件名称定义----浏览 
    name: "browsing", 
    // 事件类型定义 
    eventType: hiAppEvent.EventType.BEHAVIOR, 
    // 事件参数定义 
    params: eventParams, 
  }; 
  hiAppEvent.write(eventInfo).then(() => { 
    console.log(pageName + "浏览了" + time + "秒") 
  }).catch((err: BusinessError) => { 
    hilog.error(0x0000, 'testTag', `HiAppEvent err.code: ${err.code}, err.message: ${err.message}`) 
  }); 
}

在进入页面时开始计时,关闭页面时进行调用事件打点函数:

onPageShow(){ 
  this.timer = setInterval(() =>{ 
    this.index++; 
  },1000) 
} 
 
onPageHide(){ 
  clearInterval(this.timer); 
  hiAppEventFun(this.pageInfo, this.index) 
}

实现效果

分享
微博
QQ
微信
回复
2024-05-29 22:15:30
相关问题
使用鸿蒙js可以实现禁用事件
2771浏览 • 1回复 已解决
如何判断某个应用是否为系统应用
770浏览 • 1回复 待解决
浏览应用应该怎样拉起?
41浏览 • 2回复 待解决
有谁知道如何拉起浏览应用
719浏览 • 1回复 待解决
"NAPI通信耗时长"导致丢帧分析
185浏览 • 1回复 待解决
DFX-性能打点(HiTrace)指导
252浏览 • 1回复 待解决
点击事件,@State 页面未生效,在线等
1461浏览 • 0回复 待解决
xComponent组件帧率怎么统计?
274浏览 • 1回复 待解决
鸿蒙有统计相关框架吗?
4818浏览 • 1回复 待解决
postgresql 大量数据的统计问题?
1108浏览 • 2回复 待解决