// 获取用户信息模块 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)
说明
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}`) })
设置用户属性,存在则覆盖,不存在则创建。
appLog.profile()?.set({ "set1": "value", "set2": "value" })
设置用户属性,存在则不设置,不存在则创建。适合首次相关的用户属性,比如首次访问时间等。
appLog.profile()?.setOnce({ "setOnce": "value" })
设置数值类型的属性,可进行累加。
appLog.profile()?.setOnce({ "increment": 1 })
设置List类型的用户属性,可持续向 List 内添加。
appLog.profile()?.append({ "appendStr": "1", "appendNum": 1 })
删除用户的属性。
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")
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")
说明
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 }) }) }