API
SDK配置选项
import common from '@ohos.app.ability.common'
export enum LogLevel {
TRACE,
DEBUG,
INFO,
WARN,
ERROR,
NONE
}
export type RecordRule = {
// 需要采集此参数的域名/URL配置。目标URL包含于这项配置才会采集,如果不配置本条规则会对所有URL生效
url?: string
// 获取全部请求头, 默认空
reqHeaders?: string[]
// 请求体配置, 默认空
reqBody?: string[]
// 获取全部返回头, 默认空
resHeaders?: string[]
// 返回体配置, 默认空
resBody?: string[]
}
export type NetworkConfig = {
// 网络请求采集开关, 默认false
enabled?: boolean
// 跨应用追踪开关, 默认false
trackingEnabled?: boolean
// 采集header body开关, 默认false
recordEnabled?: boolean
// 采集数据白名单
recordConfig?: RecordRule[]
// 采集数据黑名单
recordBlockConfig?: RecordRule[]
// 采集的body截断长度, 单位KB
bodyMaxSize?: number
// 第三方apm请求头支持
apms?: string[]
// trace propagators
propagators?: string[]
// mPaaS开关, 默认false
mPaaSEnabled?: boolean
// mPaaS配置, 默认从entry模块rawfile中的mpaas.config文件中读取, 用户也可以通过此字段手动配置, 传入数据格式同mpaas.config的JSON格式。注意: 一旦设置此字段,将不再读取mpaas.config文件,即使手动配置不合法也不会回退到读取文件的默认行为
mPaaSConfig?: Record<string, string>
}
export type CrashConfig = {
// 崩溃采集总开关, 默认true
enabled?: boolean
// js崩溃采集开关, 默认true
jsCrashEnabled?: boolean
// cpp崩溃采集开关, 默认true
cppCrashEnabled?: boolean
}
export type FreezeConfig = {
// 卡死监控开关, 默认false
enabled?: boolean
}
export type LaunchWaitingPolicy = {
cold?: {
// 启动耗时事件等待时间, 默认30000ms
launchEvent?: number
// ability生命周期等待时间, 默认10000ms
ability?: number
// page生命周期等待时间, 默认15000ms
page?: number
},
hot?: {
// 启动耗时事件等待时间, 默认15000ms
launchEvent?: number
// 启动耗时事件等待时间, 默认10000ms
ability?: number
}
}
export type UserExperienceConfig = {
// 总开关, 默认false
enabled?: boolean
// 启动监控开关, 默认true
launchEnabled?: boolean
// 页面监控开关, 默认true
pageEnabled?: boolean
// 操作监控开关, 默认true
userActionEnabled?: boolean
// 使用自定义冷启动耗时结束点, 默认false
customLaunchEnd?: boolean
// 全量trace采集开关, 默认false
traceEnabled?: boolean
// 慢操作阈值, 默认3000ms
slowUserActionThreshold?: number
// 慢启动阈值, 默认3000ms
slowLaunchThreshold?: number
// 热启动阈值, 默认30s
hotStartThreshold?: number
// 慢可交互阈值, 默认1000ms
slowPageLoadThreshold?: number
// 慢首屏阈值, 默认3000ms
slowPageDurationThreshold?: number
// 启动耗时计算等待策略
launchWaitingPolicy?: LaunchWaitingPolicy
// 判断为操作错误的错误请求占比, 默认100
actionFailureThreshold?: number
// 启动耗时上限, 超过则不上报, 设置为0则不过滤, 默认60000ms
maxLaunchDuration?: number
}
export type UserActionConfig = {
// 总开关, 默认false
enabled?: boolean
}
export type WebviewConfig = {
// 总开关, 默认false
enabled?: boolean
// web sdk注入开关, 默认true
webSdkEnabled?: boolean
// 注入jsProxy开关, 默认true
jsProxyEnabled?: boolean
// JS片段注入开关, 默认true
jsSnippetEnabled?: boolean
}
export const ViewRecordQualities = {
// 极低质量
ULTRA_LOW: 0,
// 低质量
LOW: 1,
// 高质量
HIGH: 2
} as const
export type RecordQuality = typeof ViewRecordQualities[keyof typeof ViewRecordQualities]
export const ViewRecordUploadTypes = {
// 仅WIFI
WIFI_ONLY: 0,
// WIFI和移动网络
WIFI_AND_MOBILE: 1
} as const
export type RecordUploadType = typeof ViewRecordUploadTypes[keyof typeof ViewRecordUploadTypes]
export type ViewRecordConfig = {
// 总开关, 默认false
enabled?: boolean
// 上传类型, 默认为仅WIFI
uploadType?: RecordUploadType
// 图像质量, 默认为极低质量
quality?: RecordQuality
// 上传失败视图采集数据缓存大小, 单位MB, 默认10MB
maxCacheSize?: number
// 页面遮罩配置
pageBlacklist?: string[]
// 组件id遮罩配置
viewIdBlacklist?: string[]
}
export type EventConfig = {
// 暴力点击监控开关, 默认false
rageClickEnabled?: boolean
}
export type CommonConfig = {
// 是否允许采集操作系统版本, 默认true
osVersionEnabled?: boolean
// 是否允许采集设备厂商, 默认true
manufacturerEnabled?: boolean
// 是否允许采集设备型号, 默认true
manufacturerModelEnabled?: boolean
// 是否允许采集运营商信息, 默认true
carrierEnabled?: boolean
// 是否允许屏幕分辨率采集, 默认true
displayResolutionEnabled?: boolean
}
/**
* 应用配置
*/
export type InitConfig = {
// redirect服务器地址
redirectHost: string
// 应用appKey
appKey: string
// 上下文
context: common.Context
// 日志级别, 默认LogLevel.INFO
logLevel?: LogLevel
// 数据是否使用http发送数据, 默认false, 使用https发送
httpEnabled?: boolean
// axios对象, 需要拦截axios时需要传入
axios?: any
// 最大获取的栈深度, 默认20
stackDepth?: number
// 是否使用历史数据协议上报(平台3.8.0.0和以下版本平台需要设置为true),默认false
legacyDataProtocol?: boolean
// 构建ID
buildId?: string
// init内部部分逻辑是否采用异步初始化, 默认false
asyncInit?: boolean
// 是否启用国密加密方式上传数据, 默认false
encEnabled?: boolean
// 是否开启数据压缩上传, 默认true
compressEnabled?: boolean
// SDK请求超时时间, 单位ms, 默认15000ms, 最小设置3000ms, 设置低于最小值将回退为默认值
timeout?: number
// 插件配置
plugins?: Plugin[]
// 公共配置
common?: CommonConfig
// 网络请求采集配置
network?: NetworkConfig
// Crash监控配置
crash?: CrashConfig
// AppFreeze监控配置
freeze?: FreezeConfig
// 用户体验配置
ue?: UserExperienceConfig
// 用户行为分析配置
ua?: UserActionConfig
// webview配置
webview?: WebviewConfig
// 视图采集配置
viewRecord?: ViewRecordConfig
// 事件配置
event?: EventConfig
}
说明:
- init传入的配置为SDK初始配置,在SDK与服务端通信后会优先以服务端下发的配置为准
插件
| 插件名称 | 包名 |
|---|---|
| 视图采集插件 | @tingyun/sdk-plugin-record |
注:具体使用方式请参考对应插件的说明文档
SDK启动状态管理
SDK启动流程为异步,调用tingyun.init后SDK并未立即完成启动。部分API需要在SDK启动完成后才能调用。
SDK提供了三个API来管理启动状态:
isReady- 同步判断SDK是否已启动onReady- 注册启动完成回调waitForReady- 异步等待启动完成
isReady
同步判断SDK是否已启动完成。
API:
export type Tingyun = {
/**
* 判断SDK是否已经启动完成
* @returns SDK是否已启动
*/
isReady: () => boolean
}
使用方式:
import tingyun from '@tingyun/sdk-core'
if (tingyun.isReady()) {
// SDK已启动,可以调用需要依赖启动状态的API
}
onReady
注册SDK启动完成的回调函数。
API:
export type SDKReadyResult = {
// 启动流程结束后SDK是否是启用状态
enabled: boolean
// 是否超时
timeout?: boolean
// 启动流程结束后的提示信息
message?: string
}
export type SDKReadyOptions = {
// 等待超时时间, 单位毫秒, 0表示无超时时间, 默认为0
timeout?: number
}
export type SDKReadyCallback = (result: SDKReadyResult) => void
export type Tingyun = {
/**
* 注册SDK启动完成的回调函数
* @param callback SDK启动完成时执行的回调
* @param options 配置选项
*/
onReady: (callback: SDKReadyCallback, options?: SDKReadyOptions) => void
}
使用方式:
import tingyun from '@tingyun/sdk-core'
tingyun.onReady(() => {
// SDK已启动完成,调用需要依赖启动状态的API
})
说明:
- 如果调用
onReady时SDK已经启动完成,回调会立即执行 - 可以多次调用
onReady注册多个回调
waitForReady
异步等待SDK启动完成。
API:
export type Tingyun = {
/**
* 异步等待SDK启动完成
* @param options 配置选项
* @returns SDK启动结果
*/
waitForReady: (options?: SDKReadyOptions) => Promise<SDKReadyResult>
}
使用方式:
import tingyun from '@tingyun/sdk-core'
async function setupAfterInit() {
await tingyun.waitForReady()
// SDK已启动完成,调用需要依赖启动状态的API
}