You need to enable JavaScript to run this app.
导航
HarmonyOS Next SDK 埋点与属性
最近更新时间:2024.11.06 16:39:35首次发布时间:2024.11.06 16:39:35

用户与用户属性
// 获取用户信息模块
appLog.user()

登录态变化调用

账户登录

如您的产品中有账户体系,请在用户登录后立即设置 uuid,以保证用户登录前后口径一致性。 6.13.0+ 版本支持在初始化 AppLog 之前调用,用于设置已登录的用户 uuid。

// 设置 UUID
appLog.user()?.setUserUniqueID("your_uuid")

// 如果有多口径需求可以看下面的设置
// 设置 UUID + UUIDType
appLog.user()?.setUserUniqueID("your_uuid", "your_uuid_type")
// 单参数的 setUserUniqueID(uuid) 等效于 双参数的 setUserUniqueID(uuid, lastuuidType) 只是默认情况下 uuidType 没有,如果设置过 uuidType 想要清空,需要额外设置:
appLog.user()?.setUserUniqueID("your_uuid", null)

账户登出

在账户登出时调用。

// 登出 UUID
appLog.user()?.setUserUniqueID(null)

// 如果有多口径需求可以看下面的设置
// 登出 UUID + UUIDType
appLog.user()?.setUserUniqueID(null, null)

多ID口径

说明

1.3.0 之后版本支持,多ID口径功能需单独申请开通,使用时,需在上报用户ID、ID type时,同时配置id_bind关系,以尽可能准确还原一个真实的用户。更多关于多ID口径的介绍和使用指导请参见使用多ID类型

// 示例演示
appLog.user()?.bind({
  "id_type_1": "id_type_value_1",
  "id_type_2": "id_type_value_2"
}, (result: IDBindParams) => {
  hilog.info(0x0000, 'AppLogH', `IDBindSuccess result: ${JSON.stringify(result)}`)
  // 更新用户状态
  appLog.user()?.setUserUniqueID("id_type_value_1", "id_type_1")
}, (code: number, message: StringOrNull) => {
  hilog.info(0x0000, 'AppLogH', `IDBindFail code: ${code}, message: ${message}`)
})

设置用户属性

ProfileSet

设置用户属性,存在则覆盖,不存在则创建。

appLog.profile()?.set({
  "set1": "value",
  "set2": "value"
})

ProfileSetOnce

设置用户属性,存在则不设置,不存在则创建。适合首次相关的用户属性,比如首次访问时间等。

appLog.profile()?.setOnce({
  "setOnce": "value"
})

ProfileIncrement

设置数值类型的属性,可进行累加。

appLog.profile()?.setOnce({
  "increment": 1
})

ProfileAppend

设置List类型的用户属性,可持续向 List 内添加。

appLog.profile()?.append({
  "appendStr": "1",
  "appendNum": 1
})

ProfileUnset

删除用户的属性。

appLog.profile()?.unset("set2")

事件与事件属性

上报代码埋点

用户行为日志采用事件 event + 属性 params 的形式,事件一般对应多个属性,也可以仅有事件没有属性。代码埋点方案一般由数据分析师或产品运营设计。

  • 仅上报事件的代码埋点,示例如下:
// 示例:上报事件 event,该事件不包含属性
// 置于业务逻辑对应位置
appLog.event("event")
  • 上报事件和对应属性的代码埋点,示例如下:
// 示例:上报事件 event,该事件包含两个属性
// 一个 string 类型的属性,属性名为 key_string,属性值为 value_string
// 一个 int 类型的属性,属性名为 key_int,属性值为 10
// 置于业务逻辑对应位置
appLog.event("event", {
  "key_string": "value_string",
  "key_int": 10
})

事件公共属性

如需在每个事件中都包括某属性,可通过公共属性设置,无需在每个事件中重复设置。公共属性只需设置一次,即可包括在所有代码埋点事件、预置事件和全埋点事件中。

设置公共属性

/*
 * 示例:设置自定义的公共属性,属性名为 key_public,属性值为 value_public
 * 关于自定义 “公共属性” 请注意:
 * 1. 上报机制是随着每一次日志发送进行提交,默认的日志发送频率是 1 分钟,
 *    所以如果在一分钟内连续修改自定义公共属性,按照日志发送前的最后一次修改为准;
 * 2. 不推荐高频次修改,如每秒修改一次。
 */
appLog.setHeaderInfo("key_public", "value_public")

移除公共属性

// 示例:移除属性名为 key_public 的公共属性
appLog.removeHeaderInfo("key_public")

订阅平台 ID

订阅 Did Ready

appLog.topicReceiver()?.on(Topic.DidReady, (didInfo) => {
  setTimeout(() => {
    hilog.info(0x0000, 'AppLogH', `AppLog did ready:  ${didInfo["bd_did"]}`)
  })
})

didInfo 格式:
// device_info_from 表示该信息来自本地还是服务端请求返回
// device_info_from: did_from_remote 表示数据来自服务端返回
// device_info_from: did_from_local 表示数据来自本地缓存
{
    "bd_did": "xxxx",
    "install_id": xxxx,
    "device_info_from": "did_from_remote"
}

组件曝光事件采集

用户需要手动标记监听某个 View 的曝光事件。当这个 View 出现在屏幕可视范围内时,会自动触发一个曝光事件。

说明

1.2.0 之后版本支持,用户需要手动标记监听某个 View 的曝光事件。当这个 View 出现在屏幕可视范围内时,会自动触发一个曝光事件。

目前版本能力基本和 Android 对齐,暂不支持按时间曝光配置以及调试视图。

说明

可以根据曝光事件内部的 $exposure_type 属性区分:
$exposure_type:0 首次曝光
$exposure_type:3 重复曝光
$exposure_type:6 从其他页面返回的曝光
$exposure_type:7 后台返回曝光
如果想在实现组件只曝光一次的效果,可以在新版曝光回调中通过 $exposure_type == 0 进行首次曝光过滤。

//  需要给组件添加 ID
Button('Test', { stateEffect: true, type: ButtonType.Capsule })
  .id("test_btn"))

//  请在页面 build 后开始监控,如果传入过早,无法通过 NodeId 找到对应组件,就无法处理曝光
//  开始曝光监控,曝光时给 SDK 传给 ID,来确定需要监控哪个组件的曝光
appLog.exposure()?.observeByNodeId("test_btn", this.getUIContext(), {
    //  Optional,默认为 "$bav2b_exposure"
    eventName: "custom_exposure",
    //  Optional,自定义曝光事件属性
    properties: {
        "test": "test"
    },
    //  Optional, 曝光配置,有效曝光面积和曝光事件回调
    //  有效曝光面积: 有效曝光的 View 显示面积的比例,默认是 0,取值 0-1
    //  曝光事件回调: 触发曝光事件时回调,会携带当前曝光事件相关属性,可以进行自定义追加以及支持过滤
    config: {
        exposureCallback: (param) => {
          //  支持在回调中添加自定义属性
          //  true 保留曝光事件
          return true
        }
    }
})

//  在适当实际停止曝光监控,如离开页面或者其他逻辑
appLog.exposure()?.disposeByNodeId("test_btn")

全埋点-beta

说明

1.2.0 之后版本支持,由于鸿蒙已不再推荐 route 页面路由,主推 Navigation 组件导航,所以 SDK 以 Navigation 组件导航为主。

暂不支持 Tab 切换监听,目前系统 Tab 监听不完善,无法监听到 Tab 进入、退出,只能监听到 Tab 切换。

onWindowStageCreate(windowStage: window.WindowStage): void {
  // 推荐在 EntryAbility loadContent 时开启,以便对页面生命周期更完整
  windowStage.loadContent('pages/Index', (err, data) => {
    appLog.bav()?.enablePlugin(windowStage.getMainWindowSync().getUIContext(), {
      // 是否采集页面离开事件
      enablePageLeaveEvent: true,
      // 是否采集组件点击事件
      enableClickEvent: true
    })
  })
}