本文介绍如何在小程序Pro中使用SDK调用API。
全文的client代表的是SDK实例。
调用后开始拉取服务端配置以及监听各个事件。为了确保监听到的信息比较完善,请将init放到最前面。推荐在App初始化前调用该方法,随后在start调用后开始上报。
useLocalConfig?: boolean
client.init(c: InitConfig) => void
更改通用属性上下文,在start之前调用可用于异步设置userId和deviceId。
interface MiniProgramUserConfig {
client.config(config: MiniProgramUserConfig) => void
deviceId: 'deviceId_test'
开始上报数据,一般在异步修改通用属性后触发。
举个例子:如果您需要等代码某个接口下发后拿到UserId后再上报,可以像如下伪代码方式接入:
getUserId().then(res => {
设置自定义维度,context是一个全局维度的上下文,对所有事件生效。context更新后,只对之后包装的事件生效。
因为init时会发送一些事件,比如pageview。如果要设置一些初始化的上下文,需要在init之前设置context。
interface ContextAgent {
set: (k: string, v: any) => ContextAgent
merge: (ctx: Record<string, any>) => ContextAgent
delete: (k: string) => ContextAgent
clear: () => ContextAgent
get: (k: string) => string
toString: () => Record<string, string>
client.context.set('key', 'value')
client.context.merge({ key: 'value' })
client.context.delete('key')
上报一次PV,重复上报相同PID时也会上报。
说明
程序中有relaunch事件可以重新渲染当前页面。
client.sendPageview(pid: string) => void
client.sendPageview('pid_test')
对当前的PID进行结算停留时长,调用一次就会消费掉当前PID,多次调用时,只会上报一次。
const enum PageviewSourceType {
client.sendPageviewWithHide(source = PageviewSourceType.hide) => void
client.sendPageviewWithHide('hide')
上报一个自定义事件。
注意
事件格式不符合将会试图转换,无法转换的事件会被上报,但是服务端无法消费。
interface CustomEventPayload {
metrics?: { [key: string]: number }
categories?: { [key: string]: string }
client.sendEvent(data:CustomEventPayload) => void
上报一个自定义日志。
注意
日志格式不符合会试图转换,无法转换的日志会被上报,但是服务端无法消费。
export interface CustomLogPayload {
extra?: { [key: string]: string | number }
level?: 'debug' | 'info' | 'warn' | 'error'
client.sendLog(data: CustomLogPayload) => void
content: 'function `test` was invoked',
手动捕获JS异常,传入错误的name、message、stack即可。
export interface JsError {
client.captureException(error: JsError, extra?: { [key: string]: string }) => void
client.captureException({
添加用户行为栈,不会单独上报,JS Error上报时携带该上报信息。
data?: { [key: string]: string }
client.addBreadcrumb(breadcrumb: Breadcrumb) => void
data: 'pages/index/index'
您需要了解Client中做了什么或需要调试Client时,可以使用以下生命周期函数。
监听实例被初始化。
client.on('init',() => {
监听实例开启上报。
client.on('start', () => {
监听实例配置变更之前,可拿到新的配置。
client.on('beforeConfig', (config: Partial<Config>) => {
监听实例配置变更后的瞬间。
client('on', 'config', () => {
监听实例被挂载属性的瞬间,可拿到属性名。
client('on', 'provide', (name: string) => {
监听事件被监控插件发送的瞬间,用于为事件补充上下文,返回Falsy类型则不上报。
type Falsy = false | null | undefined
client.on('report', (ev: ReportEvent): ReportEvent | Falsy => {
监听事件被包装上下文之前的瞬间,能够拿到即将被包装的数据,返回Falsy类型则不上报。
type Falsy = false | null | undefined
client.on('beforeBuild', (ev: ReportEvent): ReportEvent | Falsy => {
监听事件被包装上下文之后的瞬间,能够拿到即将上报的数据,返回Falsy类型则不上报。
type Falsy = false | null | undefined
client.on('build', (ev: SendEvent): SendEvent | Falsy => {
监听事件被发送之前的瞬间,返回Falsy类型则不上报。
type Falsy = false | null | undefined
client.on('beforeSend', (ev: SendEvent): SendEvent | Falsy => {
注册事件发送之后的回调。
client.on('send', (e: Callback<SendEvent>) => {
注册实例销毁之前的回调。
client('on', 'beforeDestroy', () => {
立即上报数据。默认情况下,SDK会缓存数据至队列并批量发送,也会在小程序关闭前强制上报所有已缓存数据,以此减少网络连接损耗。当用户想要在某个时刻强制上报数据,可以调用以下方法:
client('on', 'init', () => {
client.getSender().flush()