You need to enable JavaScript to run this app.
增长分析 DataFinder

增长分析 DataFinder

复制全文
HarmonyOS Next SDK 内测版(旧版文档)
HarmonyOS Next SDK 埋点与属性
复制全文
HarmonyOS Next SDK 埋点与属性

注意

HarmonyOS Next SDK集成文档已改版,请查看新版文档:HarmonyOS Next SDK 集成

用户与用户属性
// 获取用户信息模块
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 & 1.3.1-all 后开始支持。

说明

仅 SaaS-云原生 / 私有化支持,多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()?.increment({
  "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

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"
}

请求 SSID

本小节功能在 1.3.1 后开始支持。

说明

调用时机说明:请在 SDK 内部初始化完成后开始请求 SSID,如何判断 SDK 初始化完成,可以订阅 HeaderReady。

requestSsidWithCurrUUID

使用当前 SDK 内部的 uuid / uuidType(如涉及到多口径)值,去请求对应 SSID。

// 调用 requestSsidWithCurrUUID 请在 HeaderReady 后
applog.topicReceiver()?.stickyOnce(Topic.HeaderReady, async () => {
  let ssid = await applog.user()?.requestSsidWithCurrUUID()
  hilog.info(0x0000, 'AppLogH', `AppLog ssid:  ${ssid}`)
})

requestSsidWithSpecifyUUID

使用开发者指定的 uuid / uuidType(如涉及到多口径)值,去请求对应 SSID。

// 调用 requestSsidWithSpecifyUUID 请在 HeaderReady 后
applog.topicReceiver()?.stickyOnce(Topic.HeaderReady, async () => {
  let ssid = await applog.user()?.requestSsidWithSpecifyUUID("test")
  hilog.info(0x0000, 'AppLogH', `AppLog ssid:  ${ssid}`)
})

// 仅针对多口径
applog.topicReceiver()?.stickyOnce(Topic.HeaderReady, async () => {
  let ssid = await applog.user()?.requestSsidWithSpecifyUUID("test", "test_type")
  hilog.info(0x0000, 'AppLogH', `AppLog ssid:  ${ssid}`)
})

组件曝光事件采集

本小节功能在 1.2.0 & 1.3.1-all 后开始支持。

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

说明

用户需要手动标记监听某个 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 & 1.3.1-all 后开始支持。

说明

由于鸿蒙已不再推荐 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
    })
  })
}

切换账号设置数据发送方式

与 Android 一样,开启隐私模式后,SDK 停止接收事件并丢弃,并停止网络请求发送。

applog.eventPlugin()?.setPrivacyMode(true); //默认是 false,设置后 true,不采集不上报

采集时长事件

本小节功能在 1.3.1 后开始支持。

带有时间属性的事件可以使用时长事件采集接口,例如采集视频播放时长事件等。示例:

// 在视频开始播放时调用
applog.eventPlugin()?.startDurationEvent("play");

// 在视频暂停播放时调用
applog.eventPlugin()?.pauseDurationEvent("play");

// 在视频继续播放时调用
applog.eventPlugin()?.resumeDurationEvent("play");

// 在结束播放时调用,此时会上报一个 play 事件,且带有 $event_duration 属性(记录了播放时长,单位毫秒) 
applog.eventPlugin()?.stopDurationEvent("test", {
      "key": "value"
})

// 支持自定义时长事件事件名,默认情况事件名为方法第一个参数
applog.eventPlugin()?.stopDurationEvent("play", {
      "key": "value"
}, "custom_play")
最近更新时间:2025.06.30 18:49:45
这个页面对您有帮助吗?
有用
有用
无用
无用