更新时间:2024-10-16
npm
仓库引入npm i @datatower-ai/sdk-core-web
import { DataTower } from '@datatower-ai/sdk-core-web';
// 初始化
DataTower.initSDK({/* ... */})
下载web-sdk压缩包
下载链接:datatower-web-sdk
TypeScript ESModule 项目
dt.web.mjs
、dt.web.d.mts
放入项目 libs 目录下,如果 libs 不存在,新建 libs 目录import { DataTower } from '../libs/dt.web.mjs';
JavaScript CommonJS 项目
dt.web.cjs
、dt.web.d.cts
放入项目 libs 目录下,如果 libs 不存在,新建 libs 目录const { DataTower } = require('../libs/dt.web.cjs')
JavaScript UMD 项目
dt.web.js
放入项目 libs 目录下,如果 libs 不存在,新建 libs 目录index.html
文件中引入
<script type="text/javascript" src="../libs/dt.web.js" />
DataTower
已在全局挂载
const DT = window.DataTower
DataTower.ai Core SDK 唯一初始化入口
class DataTower {
static initSDK(config: Config): void;
}
参数名 | 类型 | 是否必传 | 说明 | 示例 |
---|---|---|---|---|
token | string | 是 | JS-SDK上报的token | jf923h7hoasuy763 |
appId | string | 是 | 项目唯一标识,创建项目后 DT 后台自动分配,请在【项目设置-项目详情】中获取 | dt_test |
serverUrl | string | 是 | 数据上报地址,创建项目后 DT 后台自动分配,请在【项目设置-项目详情】中获取 | https://xxx.roiquery.com/web,注意路径中的/web |
isDebug | boolean | 否 | 是否打开调试,调试模式下将打印 log,默认为 false,log 标签为 DataTower | true/false |
logLevel | number | 否 | log 的级别,默认为 LogLevel.VERBOSE,仅在 isDebug = true 有效 | Log.VERBOSE、Log.DEBUG、Log.ERROR 等 |
manualEnableUpload | boolean | 否 | 是否手动启动上报,, 如设为 true, 则需要自行调用 enableUpload 开启上报,默认为false | true/false |
throttleWait | number | 否 | 节流延迟时间,默认1000ms,作用是将连续触发上报的多个事件合并到一个请求中。手动启动上报时,该值无效 | 1000 |
maxQueueSize | number | 否 | 上报队列最大长度,默认为 10,小于等于0时表示立即发送。手动启动上报时,该值无效 | 10 |
// DT SDK 初始化
DataTower.initSDK({
appId: "appId",
serverUrl: "https://example.com",
isDebug: true,
logLevel: LogLevel.VERBOSE,
manualEnableUpload: false,
});
可以在用户每一次登录时,调用 setAccountId
设置用户的账号 ID, DT 系统将会以账号 ID 作为身份识别 ID,多次调用 setAccountId
将覆盖先前的账号 ID
若您的应用没有账号体系可以不设置
class DataTower {
static setAccountId(id: string): void;
}
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
id | string | 是 | 自有用户系统的 id |
DataTower.setAccountId("123456");
如果需要清除账号 ID,请传入空字符串
typescript 复制代码DataTower.setAccountId("");
异步获取由 SDK 生成的设备标识 DT ID。
class DataTower {
static getDataTowerId(callback: (id: string) => void): void;
static getDataTowerId(): Promise<string>;
}
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
callback | (id: string) => void | 否 | 用户接收 dt id 的回调 |
DataTower.getDataTowerId((id) => console.log(id));
// or
const id = await DataTower.getDataTowerId();
调用 track
设置自动上报的埋点事件和事件属性
class DataTower {
static track(eventName: string, properties: Record<string, string | boolean | number>): void;
}
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
eventName | string | 是 | 事件名称 |
properties | Record<string,string | boolean | number> | 是 | 自定义事件属性 |
DataTower.track("test_track", {
test_property_1: "test",
test_property_2: 1,
});
DT 系统支持的用户属性设置类型总览说明如下
操作 | 对应事件名 | 处理规则 |
---|---|---|
覆盖用户属性 | #user_set |
对用户表进行操作,覆盖用户的原有属性值,如果之前不存在该用户属性,则会新建该用户属性,类型与覆盖操作传入属性的类型一致 |
初始化用户属性 | #user_set_once |
对用户表进行操作,初始化用户属性,如果该属性已有值存在,系统忽略本次操作 |
累加用户属性 | #user_add |
对用户表进行操作,对数值型的用户属性做累加计算,如果该属性还未被设置,则会赋值 0 后再进行计算,可传入负值等同于相减操作 |
清空用户属性值 | #user_unset |
对用户表进行操作,清空用户属性的属性值,即设置成 NULL,如果被清空的属性不存在也不会新建该属性 |
追加列表型用户属性的元素 | #user_append |
对用户表进行操作,对列表类型的用户属性追加元素,如果被追加的列表属性不存在,系统将自动生成并进行追加 |
追加并去重列表类型用户属性的元素 | #user_uniq_append |
对用户表进行操作,对列表类型的用户属性值追加元素,并会进行一次全列表去重(去重保证前后原有的元素顺序不变),如果被追加的列表属性不存在,系统将自动生成并进行追加再去重 |
对于一般的用户属性,您可以调用 userSet
来进行设置,使用该接口上传的属性将会覆盖原有的属性值,如果之前不存在该用户属性,则会新建该用户属性,类型与覆盖操作传入属性的类型一致
class DataTower {
static userSet(properties: Record<string, string | boolean | number>): void;
}
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
properties | Record<string, string | boolean | number> | 是 | 事件属性 |
DataTower.userSet({
user_sex_man: false,
user_pwd: "1111111",
user_age: 23,
});
如果您要上传的用户属性只要设置一次,则可以调用 userSetOnce
来进行设置,当该属性之前已经有值的时候,将会忽略这条信息
class DataTower {
static userSetOnce(properties: Record<string, string | boolean | number>): void;
}
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
properties | Record<string, string | boolean | number> | 是 | 事件属性 |
DataTower.userSetOnce({
user_first_paid_time: "2020-09-23",
});
当您要上传数值型的属性时,您可以调用 userAdd
来对该属性进行累加操作,如果该属性还未被设置,则会赋值 0 后再进行计算,可传入负值,等同于相减操作
class DataTower {
static userAdd(properties: Record<string, number>): void;
}
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
properties | Record<string, number> | 是 | 事件属性 设置的属性 key 为字符串,Value 只允许为数值,否则操作不生效 |
DataTower.userAdd({ total: 30 });
// 此时"total"为30
DataTower.userAdd({ total: 648 });
// 此时"total"为678
当您要清空用户的用户属性值时,您可以调用 userUnset
来对指定属性进行清空操作,如果该属性还未创建,则 userUnset
不会创建该属性
class DataTower {
static userUnset(properties: string[]): void;
}
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
properties | string[] | 是 | 用户属性名称集 |
DataTower.userUnset(["key1"]);
user_delete
将这名用户删除,您将无法再查询该名用户的用户属性,但该用户产生的事件仍然可以被查询到。class DataTower {
static userDelete(): void;
}
您可以调用 userAppend
对列表类型的用户数据追加元素
class DataTower {
static userAppend(properties: Record<string, (string | boolean | number)[]>): void;
}
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
properties | Record<string, (string | boolean | number)[]> | 是 | 用户属性名称集 |
DataTower.userAppend({ user_list: ["apple", "cube"] });
您可以调用 userUniqAppend
对列表的用户数据追加唯一元素。调用 userUniqAppend
接口会对追加的用户属性进行去重, userAppend
接口不做去重,用户属性可存在重复
class DataTower {
static userUniqAppend(properties: Record<string, (string | boolean | number)[]>): void;
}
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
properties | Record<string, (string | boolean | number)[]> | 是 | 用户属性名称集 |
// 此时user_list的属性值为["apple","ball"]
DataTower.userUniqAppend({ user_list: ["apple", "ball"] });
// 此时user_list的属性值为["apple","apple","ball","cube"]
DataTower.userUniqAppend({ user_list: ["apple", "cube"] });
调用 enableUpload
手动进行上报,仅在 manualEnableUpload
为 true
时生效
class DataTower {
static enableUpload(): void;
}
DT.enableUpload();
如需为所有事件添加属性,可以使用公共属性接口进行设置。
静态公共属性会使用持久化存储,应用退出再开启时,原先设置的值会保持不变。
class DataTower {
static setStaticCommonProperties(properties: Record<string, string | boolean | number>): void;
static clearStaticCommonProperties(): void;
}
const properties = {};
// 设置
DataTower.setStaticCommonProperties(properties);
// 清除
DataTower.clearStaticCommonProperties();
动态公共属性会在调用相关事件上报接口时动态地进行公共属性的获取,应用重启后需重新设置。
class DataTower {
static setDynamicCommonProperties(callback: () => Record<string, string | boolean | number>): void;
static clearDynamicCommonProperties(): void;
}
const properties = {};
// 设置
DataTower.setDynamicCommonProperties(() => props);
properties["key_sample"] = 20;
// Track 时会调用动态公共属性的函数来获取公共属性,并进行上报,(此时包含 "key_sample": 20)
DataTower.track("simple_event");
// 清除
DataTower.clearDynamicCommonProperties();