- SDK 版本需要 >= v1.0.0
- 在使用前,请先阅读 数据模型
- HarmonyOS SDK 是付费产品,如需使用,请联系商务或技术顾问
- 由于 HarmonyOS 多线程内存隔离机制的限制,HarmonyOS SDK 不支持 TaskPool 和 Worker 线程初始化或使用
适用范围
本文适用于 HarmonyOS 元服务接入神策 HarmonyOS SDK。
普通 HarmonyOS App 仍参考现有 HarmonyOS SDK 使用文档和集成文档:集成文档(HarmonyOS)
元服务需要额外关注以下差异:
- 元服务设备 ID 来源为 AAID 或 UUID,不使用普通 App ODID。
- 元服务本地事件缓存使用 Preferences,不使用普通 App RDB。
- 元服务访问数据接收域名需要在 AGC 的「基础服务 > 元服务域名管理」配置允许访问的服务器域名。
集成 SDK
选择 SDK 产物
| 应用形态 | 推荐产物 | 支持能力 |
|---|---|---|
| 普通 HarmonyOS App,只需要代码埋点 | base |
初始化、代码埋点、用户属性、身份、H5 打通、加密、批量发送 |
| 普通 HarmonyOS App,需要全埋点或曝光 | pro |
base 能力 + 全埋点 + 曝光 |
| HarmonyOS 元服务,只需要代码埋点 | atomic |
初始化、代码埋点、用户属性、身份、H5 打通、加密、批量发送,元服务差异适配 |
| HarmonyOS 元服务,需要全埋点或曝光 | atomic-pro |
atomic 能力 + 全埋点 + 曝光 |
注意:
- 元服务请使用
atomic或atomic-pro,不要使用普通 App 的base或pro产物。 atomic不支持SAAutoTrack、SAAutoTrackType、SAExposure等文件依赖。- 需要全埋点或曝光时,请使用
atomic-proHar 包
添加 SDK 依赖
按发布包选择 atomic 或 atomic-pro 对应 HAR 产物,并在工程 oh-package.json5 中声明依赖。依赖包名保持不变:
{
"dependencies": {
"@sensorsdata/analytics": "file:./libs/SensorsAnalyticsSDK_xxx.har"
}
}
导入 SDK
业务代码中按统一包名导入 SDK:
import sensors from '@sensorsdata/analytics'
如果使用 atomic-pro,并且需要全埋点或曝光能力,可以按需导入下述依赖:
import sensors, {
SAAutoTrack,
SAAutoTrackType,
SAExposurePlugin
} from '@sensorsdata/analytics'
初始化 SDK
元服务初始化方式与普通 HarmonyOS App 基本一致:
import sensors from '@sensorsdata/analytics'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
sensors.init({
context: this.context,
// 服务器接收地址
server_url: 'https://example.datasink.sensorsdata.cn/sa?project=default',
// 是否显示日志
show_log: true,
// 开启 App 打通 H5
app_js_bridge: true
})
}
}
SDK 只会在调用了 init 后才会触发事件和上报数据,请确保 init 在合适的时机进行调用。
参数说明:
| 参数 | 说明 |
|---|---|
context |
当前元服务可用的 Context。 |
server_url |
数据接收地址,需要使用客户项目实际地址。 |
show_log |
是否开启 SDK 日志,建议调试阶段开启。 |
批量发送配置
元服务批量发送默认开启,通常不需要客户主动配置。元服务产物已经内置适合元服务场景的默认发送配置。
元服务与普通 App 的默认发送配置不同:
| 参数 | 普通 App 默认值 | 元服务默认值 | 元服务保护范围 |
|---|---|---|---|
max_cache_size |
10000 |
100 |
20 ~ 100 |
flush_interval |
15000 |
5000 |
>= 5000 |
flush_bulk_size |
50 |
10 |
1 ~ 100 |
datasend_timeout |
30000 |
30000 |
有效数字 |
参数含义:
max_cache_size:本地最多缓存的事件条数,元服务最终有效上限不超过 100 条。flush_interval:定时发送间隔,单位毫秒。flush_bulk_size:本地缓存事件达到该条数时触发发送。datasend_timeout:数据发送请求超时时间,单位毫秒。
如果确实需要覆盖默认配置,可以在初始化时传入 batch_send:
sensors.init({
context: this.context,
server_url: 'https://example.datasink.sensorsdata.cn/sa?project=default',
show_log: true,
batch_send: {
max_cache_size: 100,
flush_interval: 5000,
flush_bulk_size: 10,
datasend_timeout: 30000
}
})
初始化后也可以动态修改部分 batch 配置。未传入的字段会继续使用当前值:
sensors.setBatchSendParams({
flush_interval: 5000,
flush_bulk_size: 5
})
元服务单独调整 batch 配置的主要原因:
- 元服务使用 Preferences 缓存待发送事件,缓存能力不等同于普通 App 的 RDB。
- 元服务属于轻量应用,用户可能即用即走,可用于发送数据的时间窗口通常更短。
- SDK 默认使用更短发送间隔和更小条数触发阈值,尽量降低进程结束前未上报的数据量。
- 元服务本地缓存有效上限不超过 100 条,不建议依赖元服务做长时间、大规模离线缓存。
客户通常不需要主动修改这些参数。如果确实需要调整,应按元服务实际事件量、单条事件大小和发送时机压测后再设置。
配置权限和 AGC 域名
元服务工程需要声明基础网络权限:
| 权限 | 用途 |
|---|---|
| 必须权限,允许应用发送统计数据,SDK 发送埋点数据需要此权限 | |
| 必须权限,允许应用检测网络状态 | |
| 可选权限,允许应用获取 WIFI 信息 |
除本地权限外,元服务还需要在 AppGallery Connect 为当前元服务配置允许访问的数据接收域名。
配置位置:
- AppGallery Connect
- 基础服务
- 元服务域名管理
httpRequest 合法域名
注意:
server_url中的数据接收域名必须加入httpRequest 合法域名。- SDK 数据上报使用 HTTP POST 请求,不需要为 SDK 数据上报配置
download 合法域名或文件上传相关域名。 - 如果发送失败并提示
It is not allowed to access this domain,通常说明 AGC 未配置对应域名。
鸿蒙官方配置说明参考:https://developer.huawei.com/consumer/cn/doc/atomic-guides/agc-help-harmonyos-server-domain
SDK 基本配置
代码埋点
调用 track 上报自定义事件:
sensors.track('BuyProduct', {
product_id: '12345',
product_name: '商品名称',
price: 99.9
})
事件属性命名规则与普通 HarmonyOS App 一致。建议使用有业务含义的英文属性名,避免使用 SDK 保留字段。
其他接口使用
关于 元服务的其他接口使用,参考:基础 API 介绍(HarmonyOS)
与普通 App SDK 的差异说明
整体功能
| 差异项 | 普通 HarmonyOS App | HarmonyOS 元服务 |
|---|---|---|
| 设备 ID 来源 | ODID / UUID 兜底 | AAID / UUID 兜底 |
| 本地事件缓存 | RDB | Preferences |
| 全埋点 | pro 支持 |
atomic-pro 支持 |
| 曝光 | pro 支持 |
atomic-pro 支持 |
| 域名访问 | 声明网络权限 | 声明网络权限 + AGC 元服务域名白名单 |
设备 ID 和匿名 ID 差异
元服务无法按普通 App 方式稳定使用 ODID,因此元服务产物使用以下策略:
- 优先读取本地已保存的设备 ID。
- 本地不存在时异步获取 AAID。
- AAID 获取成功时,将 AAID 保存为设备 ID。
- AAID 获取失败或为空时,生成 UUID 作为兜底设备 ID,并持久化保存。
因此,元服务上报事件中的设备 ID 可能为 AAID 或 UUID。UUID 兜底值会持久化,后续启动复用同一个值。
匿名 ID 仍由 SDK 统一维护,客户侧不需要因为元服务单独调整调用方式。元服务与普通 App 的主要差异在于设备 ID 的取值来源不同。
本地缓存差异
普通 App 使用 RDB 缓存事件;元服务使用 Preferences 缓存事件。
客户需要关注的差异:
- 元服务缓存能力不等同于普通 App RDB,不建议依赖元服务做长时间离线缓存。
- 元服务默认
max_cache_size = 100,最终有效上限不超过 100 条。 - 事件越多、单条事件越大,本地缓存和发送前处理的开销越明显。
- 建议客户按 100 条以内的缓存上限设计和压测。
HarmonyOS Preferences 官方说明:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-data-preferences
预置属性差异
普通 App 和元服务都会采集 HarmonyOS、应用、页面、屏幕、网络、设备型号、系统版本等公共预置属性。
元服务与普通 App 的主要差异:
- 普通 App 会采集
$manufacturer。 - 元服务不采集
$manufacturer,避免访问元服务场景下不可用或不稳定的系统字段。 - 元服务的
$device_id来自 AAID 或 UUID,普通 App 优先使用 ODID。
常见问题
元服务是否可以使用普通 App Har 产物?
不可以。
元服务需要使用 atomic 或 atomic-pro。普通 App 产物使用 ODID、RDB 和普通 App 默认实现,不适配元服务运行环境
并且部分接口 API,在元服务环境下无法使用,出现报错
元服务数据发送失败,提示不允许访问域名,如何处理?
优先检查 AGC 域名配置,参考鸿蒙文档说明:配置服务器域名
元服务除本地声明网络权限外,还需要在 AGC「基础服务 > 元服务域名管理」的 httpRequest 合法域名 中配置实际数据接收域名,域名应与 server_url 使用的数据接收域名一致。