You need to enable JavaScript to run this app.
增长分析(私有化)

增长分析(私有化)

复制全文
HarmonyOS Next SDK(内测版)
HarmonyOS Next SDK 集成
复制全文
HarmonyOS Next SDK 集成

文档导读

下图为您概要介绍 SDK 集成相关文档的组织思路,您可参考以下导读示意图了解文档结构,查阅对应文档完成 集成操作。
Image

埋点规划

在进行 SDK 集成前,您需结合您的业务分析情况先进行埋点规划,明确出待分析的业务指标中可能需要埋点的事件有哪些、属性有哪些等。进行埋点规划时,您需了解一些基本概念和 DataFinder 为您预置提供的埋点事件和属性、DataFinder 的用户标识逻辑等前置信息,结合 DataFinder 为您提供的能力进行埋点规划。

基本概念

基本概念

概念说明

埋点规划与 SDK 集成要点

详细指导文档

事件、事件属性、事件公共属性、用户属性

DataFinder 的用户行为数据分析是基于事件+用户模型的分析模型。

  • 事件&事件属性:用户的某一种或一类行为称之为“事件”,事件属性即事件触发时同步采集的事件发生的形式、位置等用来描述事件的信息。例如,某个用户购买了某个商品,则该用户的行为事件为“购买”,事件属性为“商品名称”、“商品分类”、“支付金额”等。
  • 事件公共属性:指不与某个事件强关联、在多个或所有事件中都共同存在的不频繁变化的属性,例如,应用的版本号、设备信息等。
  • 用户&用户属性:用户指的是事件行为的发生主体人。用户属性指的是用户自身状态的属性(与行为无关,例如年龄、性别等)或与行为有关但不常变化的用户相关属性(如 VIP 等级、注册时间等)。

您需根据业务分析需要,规划好待采集的事件、事件属性、用户属性有哪些、类型是什么,进行 SDK 集成时

详细概念介绍请参见数据模型

埋点、全埋点、自定义埋点

  • 埋点:通过 SDK 的开发,将事件逻辑写入代码的过程,称之为埋点。DataFinder 为您提供了预置事件及事件属性,这类事件及事件属性无需您手动埋点,只需打开采集开关即可。
  • 全埋点:是 DataFinder 提供的预置事件和事件属性的一种,在 DataFinder 中,采集的全埋点事件为 bav2b_click 按钮点击, bav2b_page 页面浏览。不需要研发额外投入,但会以上报大量数据为代价,并且只可以采集简单的 PV、UV,对于丰富业务数据的采集显得有些‘力不从心’。
  • 代码埋点:代码埋点指的是开发工程师,按照业务个性化需求,人工写入代码中以实现数据采集逻辑。采集范围广、应用灵活。但需要研发投入,且需要一定的技术能力。

通常建议您结合 DataFinder 提供的预置事件/属性和自定义埋点进行埋点规划。

埋点、全埋点

了解数据上报要求(格式、数量限制等)

进行埋点规划时,您需明确清楚需采集上报的事件、属性的数据格式要求,以及采集上报的一些限制要求,避免后续因为数据格式等不满足要求,进而导致数据采集后无法入库、后续无法查询分析。
SDK上报的数据通常有固定的格式,主要包括 header、事件两个部分。

字段

作用

HarmonyOS 端数据示例

header

存放事件公共属性。
app_id、os_name 这些都是预置的,会直接放在 header下,如果是您自定义设置的事件公共属性,会放到header.custom 下。

{
  "magic_tag": "ss_app_log",
  "header": {
    "aid": "00000000",
    "channel": "yourChannel",
    "language": "zh-Hans",
    "region": "CN",
    "timezone": 8,
    "tz_name": "Asia/Shanghai",
    "tz_offset": 28800,
    "cdid": "93759594-3924-4a1f-aa2d-4172bee1af05",
    "aaid": "e9359704-e585-4411-88e4-9a02bc7d2c2e",
    "clientudid": "21cbd1c4-e035-47d4-b341-9e1f10af0549",
    "openudid": "3ef21af7-5032-4319-ae24-460c38dbad9c",
    "platform": "Android",
    "sdk_lib": "Android",
    "sdk_version": "1.3.1-all-rc1",
    "sdk_version_code": 10010301,
    "sdk_version_name": "1.3.1-all-rc1",
    "device_model": "emulator",
    "device_brand": "HUAWEI",
    "device_manufacturer": "HUAWEI",
    "device_type": "phone",
    "rom_version": "emulator 5.0.0.123(SP16DEVC00E123R4P11log)",
    "os": "Android",
    "os_api": 14,
    "os_version": "5.0.2",
    "cpu_abi": "arm64-v8a",
    "package": "com.bytedance.harmonydemo",
    "app_version": "1.0.0",
    "version_code": 1000000,
    "install_time": 1750988605542,
    "update_time": 1750990172484,
    "display_name": "label",
    "access": "wifi",
    "density_dpi": 520,
    "resolution": "1260 * 2720",
    "user_unique_id": "your_uuid",
    "bd_did": "7086404173897436672",
    "install_id": "7086404173898187009",
    "ssid": "1731359178819711838",
    "register_time": 1750990186975
  },
  "launch": [
    {
      "local_time_ms": 1750991430396,
      "tea_event_index": 5,
      "session_id": "0fa20a1a-5ff8-4b44-8853-963a70e73d89_0000000_2",
      "$resume_from_background": true,
      "$page_key": "pages/Index_1",
      "ssid": "1731359178819711838",
      "user_unique_id": "your_uuid",
      "datetime": "2025-06-27 10:30:30",
      "nt": 4
    }
  ],
  "terminate": [
    {
      "local_time_ms": 1750991429102,
      "tea_event_index": 4,
      "session_id": "0fa20a1a-5ff8-4b44-8853-963a70e73d89_0000000_1",
      "stop_timestamp": 1750991429.102,
      "duration": 55.793,
      "$page_key": "pages/Index_1",
      "ssid": "1731359178819711838",
      "user_unique_id": "your_uuid",
      "datetime": "2025-06-27 10:30:29",
      "nt": 4
    }
  ],
  "event_v3": [
    {
      "local_time_ms": 1750991378759,
      "tea_event_index": 2,
      "session_id": "0fa20a1a-5ff8-4b44-8853-963a70e73d89_0000000_1",
      "ssid": "1731359178819711838",
      "user_unique_id": "your_uuid",
      "datetime": "2025-06-27 10:29:38",
      "nt": 4,
      "params": {
        "key_string": "value_string",
        "key_int": 10,
        "$app_version": "1.0.0"
      },
      "event": "event_name"
    }
  ],
  "local_time": 1750991429.164
}

事件

存放事件及事件属性。
事件分为 launch、terminate、event_v3。
其中 launch、terminate 为预置的启动、退出事件。
event_v3 存放自定义事件、page 事件等,每个 event_v3 类型事件都有 event、params、local_time_ms、session_id 几个字段,其中local_time_ms、session_id 是SDK自动产生的,而event、params 是业务设置的,event 是事件名,params 存放的是事件属性(值是 JSON 对象进行了序列化操作)。

其中,需要上报自定义事件、自定义属性时,您需确保事件和属性的数据格式符合要求,当前 DataFinder 支持的数据格式要求和数据上报的限制请参见支持的数据格式与事件/属性分类
常见问题:

了解用户标识逻辑

进行埋点规划时,您需要了解 DataFinder 的用户标识逻辑,用于结合自身业务的用户标识逻辑进而最终统一用户的标识数据来源。DataFinder 默认以用户作为统计分析的对象,默认使用 SSID 作为用户唯一标识 ID 来计算指标,此时用户的 SSID 就是默认的统计口径。当您的分析对象为用户时,建议保持默认统计口径 SSID,DataFinder 可通过 ID_Mapping 将用户的device_id、user_unique_id 等进行 mapping 后,尽量通过一个 SSID 还原一个真实的用户个体。

  • device_id:可作为设备的唯一 id,多为无法获取用户实名 id的场景下使用。
  • user_unique_id:为登录态用户标识,多为在能获取用户实名 ID 场景下使用,一般情况直接使用产品业务中使用的用户标识,比如登录账号。
  • SSID:为 DataFinder 的用户统计口径 ID,与设备标识 device_id、登录态用户标识 user_unique_id 互相 Mapping,能保证用户匿名和实名状态下的 ID 统一。

三类 ID 的 mapping 逻辑和更多关于用户标识的介绍详情请参见支持的用户唯一标识

说明

  • 如果您的业务中用户实名 ID 有多种 ID 类型,例如,可通过账号 ID、用户手机号等多种 ID 类型来标注用户的实名信息,您也可以使用多ID类型功能,详情请参见使用多ID类型

了解客户端支持的预置事件和属性

如上文所述,大部分业务分析场景中,您需要结合自身业务特性进行自定义埋点的规划和集成,在此之前,您可以先了解下当前 DataFinder 已为您提供的预置事件、预置属性有哪些,结合已有的预置事件和属性能力,进一步规划自定义代码埋点的需求。

  • 鸿蒙端支持的预置事件和属性列表请参见鸿蒙端预置事件及属性
  • 同时您还需关注当前禁用的预置属性列表,后续规划自定义埋点及属性时需避免与禁用属性同名,否则会导致数据无法正常上报,详情请参见禁用属性列表

梳理埋点需求设计埋点方案

准备工作

步骤1(可选):创建埋点需求/录入自定义埋点

完成埋点规划后,建议您根据规划将埋点需求创建再 DataFinder 的需求管理页面,并将自定义埋点先录入 DataFinder 完成自定义埋点在 DataFinder 元数据的入库。

  • 埋点需求管理:您可以通过 DataFinder 的埋点需求管理功能来管理埋点需求,后续可在埋点需求管理页面中持续维护和管理需求,提高管理效率。创建埋点需求管理的操作请参见需求管理
  • 自定义埋点录入:您可以根据埋点规划,先将自定义埋点创建录入至 DataFinder 的元数据,操作详情请参见新增事件新增事件属性新增用户属性

步骤2:获取 APPID

在开始集成前,首先需要在集团中拥有一个应用,进行SDK集成前,您需要获取对应应用的appid、app key、schema等信息。
私有化场景下您可以在「项目中心」->「项目管理」->「项目详情」-> 接入应用的「详情」->「应用ID」中可查看您的appid、app key、schema,详情请参见项目详情与应用列表
Image

步骤3:获取上报地址

进行数据接入上报时,您需要根据当前的环境类型和端类型确认您的数据上报地址。如果上报地址设置错误,后续会导致您无法正常上报、查询到数据。
私有化部署场景下,您需要获取部署私有化环境时,自行规划配置的数据上送地址。如您不清楚此地址,请联系您的项目经理或客户成功经理。

集成SDK

(可选)下载示例 demo

以下为您提供了一个简单的 HarmonyOS 项目作为示例 demo,下文的 SDK 集成操作指导也基于此 demo,您可先下载 demo 文件用于学习了解 HarmonyOS Next SDK 的集成操作。

harmony-demo.zip
未知大小

step1:接入SDK以及添加权限申明

注意

HarmonyOS Next SDK 要求最低接入的鸿蒙版本为 API 12 以上。
当前 HarmonyOS Next SDK 为 Bate / RC 版,鸿蒙系统目前已正式版推出,本 SDK 基于鸿蒙 HarmonyOS 5.0.0 Release 版本编译打包,后续会随华为系统的更新持续迭代,当前功能适配非完整版本。

  • 当前支持最新版的 HarmonyOS Next SDK 已支持的功能包括:
    • 自定义埋点 / 请求加密(默认加密 / 国密 sm2)/ 用户标识与用户属性 / AB 分流实验 / 事件黑名单 / web 打通 / 崩溃采集(JS 层)/ 实时埋点验证 / custom header 设置 / 全埋点(beta)/ 组件曝光 / 多 ID 口径
    • Devtools 调试工具:查看事件信息 / 查看网络请求 / 查看接入状态 / 配置信息模块 / 内置扫一扫功能
  • SDK发布日志详情请参见参考:HarmonyOS Next SDK 发布日志及升级指南
  • 暂不支持多线程 / 多进程,鸿蒙系统比较特殊,采取线程间进程隔离,需额外适配方案。

支持的环境

环境

是否支持

备注

私有化 492 版本

已支持

环境已完成适配,platform 以 openHarmony 上报。
如果是老的私有化版本升级上来的,需要联系火山引擎技术支持人员获取 HarmonyOS Next SDK 新版适配包。

私有化 492 之前版本

不支持

环境不支持或未完成适配,如果想提早集成,SDK 的 platform 会以 Android 上报。

获取SDK

您可前往GitHub地址获取基础版 HarmonyOS SDK,获取到的离线 SDK包中会包含如下文件:

  • applogx.har
  • applogx_devtools.har

接入SDK

先在项目根目录添加 applogx 目录(可以放到任意目录,后续在 entry 模块中配置正确即可),并在该目录下添加两个 sdk:
Image
在项目根目录中的 oh-package.json5 文件中添加:

// 添加到根目录中(这样项目中所有模块都可以访问)
"dependencies": {
  // sdk 强依赖 用于 gzip 压缩
  "pako": "^2.1.0",
  // 引入 AppLog 组件时,请确保组件名称是这个
  "@volcengine/applog": "file:./applogx/applogx.har",
  // 调试工具(可选)
  "@volcengine/applog_devtools": "file:./applogx/applogx_devtools.har"
},

// overrides 仅在根结点的 oh-package.json5 有效
"overrides": {
  // 重写
  "@volcengine/applog": "file:./applogx/applogx.har",
}

注意

提示:添加完依赖配置后,需要执行ohpm install命令依赖。

Pako 离线包(可选)

说明

如果开发环境无法访问鸿蒙三方仓库,可以考虑添加离线依赖。
在上面获取到的离线SDK包内也包含:pako-2.1.0.tgz

"dependencies": {
  // 引入 AppLog 组件时,请确保组件名称是这个
  "@volcengine/applog": "file:./applogx/applogx.har",
  // 调试工具(可选)
  "@volcengine/applog_devtools": "file:./applogx/applogx_devtools.har",
},

// overrides 仅在根结点的 oh-package.json5 有效
"overrides": {
  // 改成离线依赖
  "pako": "file:./applogx/pako-2.1.0.tgz",
  "@volcengine/applog": "file:./applogx/applogx.har",
}

添加新版依赖配置

注意

1.3.0 / 1.1.0 sdk 使用了鸿蒙字节码编译产物,可以参考:官方文档,需要在项目根节点 build-profile 添加以下配置:

Image

权限申明

注意

OAID 是用户弹窗权限,如需采集相关数据时,您需要在应用逻辑中添加 OAID 权限申请代码。
配置在 enrty 下的 module.json5 中:

"requestPermissions": [
  {
    // 网络权限,必要添加
    "name": "ohos.permission.INTERNET"
  },
  {
    // wifi 信息获取,必要添加
    "name": "ohos.permission.GET_WIFI_INFO"
  },
  { 
    // 获取网络信息,必要添加
    "name": "ohos.permission.GET_NETWORK_INFO"
  },
  {
    // 资产持久化,建议添加,与 deviceId 生成相关,未声明会导致卸载重装 deviceId 变化
    "name": "ohos.permission.STORE_PERSISTENT_DATA"
  },
  {
    // oaid 权限(可选),建议添加
    "name": "ohos.permission.APP_TRACKING_CONSENT",
    "reason": "$string:your_reason",
    "usedScene": {
      "abilities": [],
      "when": "inuse"
    }
  },
]

step2:初始化 SDK

通常建议集成时参考以下流程:

注意

示例代码中的yourAppId需要换成您的AppId。

初始化 SDK ---> 上报事件 ---> 设置用户登录态 ---> 验证上报

以下为一个简单的初始化 SDK 代码示例,您可通过此示例来快速了解 SDK 集成时的代码、涉及的初始化接口、典型的配置参数等,后续步骤中会为您逐步介绍 SDK 集成的详细操作要点。

// 入口文件,比如 ets/entryability/EntryAbility.ets
import { AbilityConstant, UIAbility, Want, /***/ } from '@kit.AbilityKit'
// ...
import { AppLog, InitConfig, createByDomain } from '@volcengine/applog'

// 建议将实例挂载给一个独立模块,导入这个辅助模块,该文件建议放在 ets/Global.ets
import Global from '../Global'

class EntryAbility extends UIAbility {
    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
        // 创建新的 AppLog 实例
        let appLog = new AppLog()
        // 鸿蒙 sdk channel 作为可选参数
        let config = new InitConfig('yourAppId', 'yourChannel')
          // 是否打开日志
          .setLogEnabled(true)
          // 设置上报地址
          .setUri(createByDomain('https://****.****.com'))
        // init sdk 传入配置,init 之后可以
        appLog.init(this.context, config)

        // 鸿蒙 SDK 需要手动调用 start 才开始采集敏感信息与发送请求
        appLog.start()

        // 如果要方便在其他文件中使用实例,建议将实例挂载给一个独立模块
        Global.appLog = appLog
    }
    // ...
}
// ...
// 一个独立模块,方便全局导入使用,ets/Global.ets
import type { AppLog } from '@volcengine/applog'
class Global {
  static appLog: AppLog
}
export default Global
// 在组件中上报事件以及设置登录态,比如 ets/pages/Index.ets
import Global from '../Global'

@Entry
@Component
struct Index {
  // ...
  build() {
    Button('上报', { stateEffect: true })
      .onClick(() => {
        // 上报事件
        Global.appLog?.event('event_name', {
          'key_string': 'value_string',
          'key_int': 10
        })

        // 设置登录态
        Global.appLog?.user()?.setUserUniqueID('your_uuid');
      })
  }
}

以下示例,为您逐步演示大部分场景下初始化SDK的代码接入。

导入并初始化

说明

SDK将 init 与 start 完全分离。

  • init 之后才可以调用 SDK 的各种方法,SDK 不支持 init 之前进行埋点,但 init 之后就可以开始埋点落库了。
  • 基于合规要求,start 之后才开始采集诸如 oaid 等敏感 header 信息,并且此时才进行数据请求。
  • 如果创建了 AbilityStage,可以将 init 放在 AbilityStage 的 oncreate 中,这样可以尽量初始化 SDK,然后在隐私弹窗后再调用 start。
    补充:AbilityStage 相当于 Android 中的 Application。

操作指导

// 创建新的 AppLog 实例
let appLog = new AppLog()
// 鸿蒙 sdk channel 作为可选参数
let config = new InitConfig('yourAppId', 'yourChannel')
  // 是否打开日志
  .setLogEnabled(true)
  // 设置上报地址
  .setUri(createByDomain('https://****.****.com'))
// init sdk 传入配置,init 之后可以
appLog.init(this.context, config)

// 鸿蒙 SDK 需要手动调用 start 才开始采集敏感信息与发送请求
appLog.start()

关于各环境上报域名示例
设置数据上报域名前,您需要先明确您使用的环境和所在的地域,根据实际情况设置上报域名。示例:

// ...
let config = new InitConfig('yourAppId', 'yourChannel')
  // 是否打开日志
  .setLogEnabled(true)
  // 设置私有化部署数据上送地址,替换your_REPORT_URL 例如 https://yourdomain.com
  .setUri(createByDomain('your_REPORT_URL'))
// init sdk 传入配置,init 之后可以
appLog.init(this.context, config) 
// ...

上报自定义事件

根据埋点规划,如果需要采集上报自定义事件,您可以使用“event”设置自定义事件名和事件属性。

操作指导

// 示例:上报事件 event_name,该事件包含两个属性
// 一个 string 类型的属性,属性名为 key_string,属性值为 value_string
// 一个 int 类型的属性,属性名为 key_int,属性值为 10
// 置于业务逻辑对应位置
appLog.event('event_name', {
  'key_string': 'value_string',
  'key_int': 10
})

设置用户登录态

如果需要设置用户登录态,可以使用 setUserUniqueID 方法设置 user_unique_id 属性。
通常对于需要用户实名登录时,业务上会使用一个 ID 来唯一标识这个用户,您可以通过 setUserUniqueID 方法上报对应的业务的用户标识 ID。通常这个取值可以通过业务接口获取,或者直接读取已有的固定用户标识 ID 值。

操作指导

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

step3:验证上报

使用 HarmonyOS Devtools 调试工具

  1. 接入Devtools方式,在上面接入SDK部分有包含
"dependencies": {
  // sdk 强依赖 用于 gzip 压缩
  "pako": "^2.1.0",
  // 引入 AppLog 组件时,请确保组件名称是这个
  "@volcengine/applog": "file:./applogx/applogx.har",
  // Devtools调试工具
  "@volcengine/applog_devtools": "file:./applogx/applogx_devtools.har"
}
  1. 初始化时开启DevTools
import { AppLog, InitConfig, createByDomain } from '@volcengine/applog'
import { DevTools } from '@volcengine/applog_devtools'

let appLog = new AppLog()
let config = new InitConfig('yourAppId', 'yourChannel')
appLog.init(this.context, config)

// 在init后,start前,注册 DevTools 插件
DevTools.applyDevTools(appLog)

appLog.start()
  1. DevTools大概有如下功能

Image

Image

Image

更多SDK集成实践

初始化相关配置

详情请参见初始化相关配置

事件及属性、事件公共属性

详情请参见事件及属性、事件公共属性

上报自定义用户属性

详情请参见user_unique_id、用户属性相关

采集上报元素曝光事件

详情请参见组件曝光事件采集

多实例相关

详情请参见多实例相关

更多场景实践

更多场景实践请参见HarmonyOS Next SDK 集成场景实践

埋点数据验证

完成初始化验证后,您可以在客户端进行测试操作,触发一些待采集上报的事件,测试事件上报后,大约15分钟内,您可以在增长分析平台中的用户细查页面查看具体用户行为流数据,即能看到测试事件及事件属性数据,用于验证埋点数据是否可正常采集上报。

  • 用户细查页面中展示的用户行为流数据通常有固定的格式,主要包括userheaderevents三个部分,分别展示采集上报的用户属性数据、公共事件属性属性、事件及事件属性数据,上报的数据包含了开启采集的预置和自定义的数据。
  • 如果在用户细查处能看到对应事件,表明事件上报成功,通过观察事件的属性,可以确认相应属性是否也成功上报上来了。
  • 如果数据没有正常在用户细查中查询到,您可检查一下:

HarmonyOS Next SDK API 列表

DataFinder 为您提供了丰富的 API 接口,除了上述通用流程中介绍的核心接口和典型场景的使用示例外,您也可以了解当前 HarmonyOS Next SDK 支持的主要 API 接口和其作用,根据业务需求可灵活调用对应接口完成业务数据埋点。

分类

API列表

API说明

全局API

init

对SDK实例进行初始化设置,依赖ability的context,因此调用时机适合在onCreate生命周期里。

start

让SDK实例开始真正准备执行事件上报,调用时机在init之后。

event

上报事件,在初始化之后设置才能调用。

setHeaderInfo

设置自定义的公共属性。

removeHeaderInfo

移除自定义的公共属性。

topicReceiver

SDK内部实现了一套订阅发布机制,如果希望订阅SDK内部一些特定的事件,需要先调用topicReceiver获得实例的TopicReceiver对象。

模块API

InitConfig API说明

用来专门管理SDK初始化配置的类,提供一系列方法来设置初始化配置项。

User插件API说明

用户信息插件,设置与获取用户信息,如 user_unique_id。

AB实验功能插件API说明

SDK提供AB实验能力,提供了AB实验插件,该插件包含一系列的方法:getAbConfig、getAbSdkVersion、getAllAbTestConfigs。

用户属性功能插件API说明

提供设置用户属性能力,并提供了一系列的方法:profileSet、profileSetOnce、profileUnset、profileIncrement、profileAppend。

组件曝光功能插件API说明

提供设置组件曝光采集能力,提供了一些方法:observeByNodeId、disposeByNodeId。

最近更新时间:2026.01.12 16:56:53
这个页面对您有帮助吗?
有用
有用
无用
无用