鸿蒙开发之埋点封装

421 阅读2分钟

为什么埋点?

在鸿蒙(HarmonyOS)开发中,埋点(也称为事件追踪或数据收集)是一个非常重要的环节,它用于收集用户行为、系统状态等信息,以便进行数据分析、优化产品体验或实现其他业务目标。为了简化埋点操作,通常会进行埋点封装,使得开发者可以更方便地记录所需的数据。

如何进行埋点? 接下来我就一个埋点题目详情的案例进行讲解

先封装一个数据埋点类

class TrackingService {
  // 数据埋点数据结构
  timeItem: iTimeItem = {
    endTime: 0,
    questionId: '0',
    startTime: 0
  }

  // time:毫秒 专门用来设置用户进入的时间
  public async setStartTime(startTime: number) {
    this.timeItem.startTime = startTime
  }

  // 专门用来设置用户进入的时间
  public async setEndTime(endTime: number) {
    this.timeItem.endTime = endTime
  }
  //用来设置上报的题目id
  public async  setquestionId(questionId:string){
    this.timeItem.questionId = questionId
  }

  //  每满20条埋点数据,则推送到服务器并清空
  public async save() {
    await timeListStore.setTimeList(this.timeItem) // 加入首选项

    timeListStore.getTimeList().then(res => {
      console.log('mylog->TrackingService', JSON.stringify(res.timeList))
      if (res.timeList.length >= 20) {
        hdHttp.post<string>('time/tracking', { timeList: res.timeList } as iTimeList).then(ret => {
          timeListStore.delTimeList()
          promptAction.showToast({ message: '统计时长埋点上报成功' })
        })
      }
    }, (err: BusinessError) => {
      console.log('mylog->TrackingService err', JSON.stringify(err))
    })
  }
}

在我们进入页面的时候, 开始记录埋点信息

aboutToAppear(): void {
  // 获取路由参数id的值
  let params: ParamsType = router.getParams() as ParamsType
  this.questionId = params.id

  // 在进入页面时,设置要上报的题目id和当前时间
  trackingService.setquestionId(params.id.toString())
  trackingService.setStartTime(Date.now())
  this.getData()
}

在我们离开页面的时候, 记录离开页面的信息, 并上传埋点数据给后台

async aboutToDisappear() {
  try {
    // 设置最后时间,并上报埋点数据
    await trackingService.setEndTime(Date.now())
    await trackingService.save()

  } catch (err) {
    console.log('mylog->QuestionDetailPage.ets aboutToDisappear err',JSON.stringify(err))
    throw new Error(JSON.stringify(err))
  }
}

在这里需要注意的两点

  1. 每次访问都将数据发送给服务器,将会因为很频繁的访问服务器而给服务器带来很大的访问压力,所以我们优化成了,每收集到20条数据才统一发送给服务器,当然这个数量是可以动态调整的.
  2. 我们也可以考虑把这些数据持久化到应用的首选项中,这样就算应用退出后再打开,也不会让数据丢失.