鸿蒙
鸿蒙 SDK 要求 DevEco Studio 4.0+,HarmonyOS API 10+;并依赖 ThinkingData Analytics SDK 1.8.1+(发布包声明依赖 1.9.0)。
最新版本:v1.0.0
更新时间:2026-07-22
资源下载:下载
1. 概述
从 AE 4.4 版本开始,运营模块上线了“配置中心”功能,支持在 AE 后台添加功能参数配置,通过客户端 SDK 拉取至 App,精细化定制您与玩家的互动内容。
本文介绍鸿蒙端客户端 SDK(@thinkingdata/remoteconfig)的集成过程。App 端只需要关注与数数 SDK 的交互即可,不需要关心 AE 后台配置细节。API 与架构对齐 Android tdremoteconfig v1.3.0。
2. 集成
配置中心鸿蒙 SDK 需要依赖以下 数数 SDK:
| SDK 名称 | 功能介绍 | 版本要求 |
|---|---|---|
@thinkingdata/analytics | 实现数据采集与处理 | >= 1.9.0 |
@thinkingdata/remoteconfig | 拉取 AE 后台的配置信息 | >= 1.0.0 |
2.1 ohpm 安装(推荐)
ohpm install @thinkingdata/remoteconfig
# 或
ohpm i @thinkingdata/remoteconfig
也可在宿主模块 oh-package.json5 中声明依赖后执行安装:
{
"dependencies": {
"@thinkingdata/remoteconfig": "1.0.0"
}
}
ohpm install
2.2 本地 HAR 集成(开发 / 调试)
{
"dependencies": {
"@thinkingdata/remoteconfig": "file:../TDRemoteConfig.har",
"@thinkingdata/analytics": "file:../TDAnalytics.har"
}
}
//执行
ohpm install
3. 初始化
必须先初始化 ThinkingData Analytics SDK,再初始化 RemoteConfig。
3.1 简单初始化
import { TDAnalytics } from '@thinkingdata/analytics';
import { TDRemoteConfig } from '@thinkingdata/remoteconfig';
// 先初始化 TA SDK
await TDAnalytics.init(context, 'YOUR_APP_ID', 'YOUR_SERVER_URL');
// 再初始化 RemoteConfig
TDRemoteConfig.enableLog(true); // 开发阶段建议开启
TDRemoteConfig.init(context, 'YOUR_APP_ID', 'YOUR_SERVER_URL');
3.2 使用 TDRemoteConfigSettings 初始化(推荐)
import {
TDRemoteConfig,
TDRemoteConfigSettings,
TDRemoteConfigMode
} from '@thinkingdata/remoteconfig';
const settings = new TDRemoteConfigSettings();
settings.appId = 'YOUR_APP_ID';
settings.serverUrl = 'YOUR_SERVER_URL';
// settings.templateCode = 'TEMPLATE_CODE'; // 多模板时指定,默认留空
// 可选:Debug 模式(跳过缓存控制,便于发送测试)
// settings.mode = TDRemoteConfigMode.DEBUG;
// 可选:初始化时携带的自定义拉取参数
settings.customFetchParams = { platform: 'harmonyos' };
// 可选:自定义分桶 ID(用于 A/B 实验)
settings.customBucketId = { experiment_key: 'bucket_a' };
// 初始化回调(init 阶段自动触发一次拉取)
settings.setFetchTask({
onLocalCacheReady: () => {
// 本地缓存已就绪,可安全读取上次成功的配置
},
onSuccess: () => {
// 本次网络拉取成功
},
onFailure: (code: number, error: string) => {
// 本次网络拉取失败
}
});
TDRemoteConfig.init(context, settings);
回调触发时序:
onLocalCacheReady():磁盘缓存加载完成后立即触发(有缓存才触发)- 随后发起网络拉取:成功走
onSuccess(),失败走onFailure()
4. 使用
4.1 数据结构样例
"configId" : {
"templateId" : [
{
"#strategy_id" : "2024121001",
"paramater_x" : "1111",
"#ops_receipt_properties" : {}
}
],
"#custom_params" : {
}
}
其中:
configId:在运营后台配置中心模块创建的“配置项ID”,用于标识业务模块信息。配置项说明详见配置项管理templateId:业务在“配置项”下添加的“模版ID”,用于标识具体的功能模块信息。配置模板说明详见配置模板管理#strategy_id:策略的唯一ID,用于策略生命周期管理。配置策略说明见配置策略管理paramater_x:配置模板参数,对应功能模块所需的配置参数#ops_receipt_properties:用于事件回收统计,当你需要自动统计策略效果(暂未支持)时,回收事件需要携带此属性#custom_params:客户端配置通道上的自定义参数,可定义需要携带到客户端的用户属性信息。
4.2 设置本地默认值
您可以在 TDRemoteConfig SDK 中设置配置项默认值,在 AE 服务端未添加配置项、或者本地未拉取到远端值时,SDK 会获取到本地默认值。
直接设置
TDRemoteConfig.setDefaultValues({
welcome_message: 'Hello',
max_retry: 3,
feature_enabled: false
} as Record<string, Object>, 'YOUR_APP_ID');
清空默认值
TDRemoteConfig.clearDefaultValues('YOUR_APP_ID');
4.3 获取值的方式
获取配置项下某一类已经发布上线中的策略内容:
const array = TDRemoteConfig.getData()
.get('configId')
.get('templateId')
.arrayValue();
也可按字段类型读取:
const data = TDRemoteConfig.getData('YOUR_APP_ID');
const welcome: string = data.get('welcome_message').stringValue();
const maxRetry: number = data.get('max_retry').numberValue();
const enabled: boolean = data.get('feature_enabled').booleanValue();
const uiConfig: Record<string, Object> = data.get('ui_config').objectValue();
其中:
取值规则
某一个 key 的取值过程:
- 优先取该 key 对应的远端配置的值
- 若远端没有配置该 key,则去查找该 key 的本地默认值
- 若本地默认值也没有该 key,返回空(对应类型的空值,不抛异常)
4.4 主动拉取
TDRemoteConfig.fetch('YOUR_APP_ID')
.onSuccess(() => {
const value = TDRemoteConfig.getData('YOUR_APP_ID').get('key').stringValue();
})
.onFailure((code: number, error: string) => {
// 拉取失败
});
fetch() 受频控保护,短时间内多次调用不会重复发起网络请求。如需强制拉取,使用 TDRemoteConfigMode.DEBUG 模式初始化。
4.5 监听更新
SDK 初始化之前或之后,均可添加配置拉取成功的通知监听:
TDRemoteConfig.addConfigFetchListener({
onFetchSuccess: (statusData: Record<string, Object>) => {
// 拉取配置成功
}
});
通知名称
onFetchSuccess(拉取配置成功)
通知携带的参数
通知将默认携带本次请求和上次请求期间,变更为暂停生效(suspend)、强制下线(force_offline)的策略状态,您可结合业务需求取用。若无需使用,可直接忽略。
使用以下方式获取通知参数:
const map = statusData['strategy_status_map'] as Record<string, Object>;
对应的 value 结构示例如下,用来描述配置项模版中策略 id 为 20241209 的策略状态:
{
"configId" : {
"templateId" : {
"20241209" : "suspend"
}
}
}
4.6 自定义拉取参数与 Client Params
自定义拉取参数会附加到每次拉取请求中:
TDRemoteConfig.setCustomFetchParams({
user_level: 'vip',
region: 'cn'
}, 'YOUR_APP_ID');
TDRemoteConfig.removeCustomFetchParam('user_level', 'YOUR_APP_ID');
Client Params 会持久化到本地,并随每次拉取上报:
TDRemoteConfig.addClientParams({ login_count: 5, vip_level: 2 });
TDRemoteConfig.accumulateNum('launch_count', 1);
const all = TDRemoteConfig.getClientParams();
TDRemoteConfig.removeClientParam('vip_level');
4.7 账号切换
TA SDK 的 login / logout / setDistinctId 会触发远程配置自动重拉(SDK 内部监听身份变更)。应用回前台时也会自动检测 identity 变化。
import { TDAnalytics } from '@thinkingdata/analytics';
TDAnalytics.login('user_account_id');
TDAnalytics.logout();
TDAnalytics.setDistinctId('new_distinct_id');
5. 发送测试
为了快速验证接入可用性与配置策略有效性,SDK 支持开启测试模式。
const settings = new TDRemoteConfigSettings();
settings.mode = TDRemoteConfigMode.DEBUG;
settings.appId = 'YOUR_APP_ID';
settings.serverUrl = 'YOUR_SERVER_URL';
TDRemoteConfig.init(context, settings);
客户端开启 Debug 模式后,会按测试策略节奏拉取配置。在 AE 运营模块可以创建模版测试或者策略测试,等待拉取配置的过程中,可以关注前端页面的进度节点。
参考操作文档 配置模板管理 中的客户端发送测试部分。
客户端 SDK 发送测试需要使用测试设备,您可在测试设备列表中选择或添加测试设备。
开发阶段也可开启 SDK 日志,便于排查:
TDRemoteConfig.enableLog(true);
hdc shell hilog -T TDRemoteConfigSDK

