如果使用beforeSend生命周期或者使用条件采样,您需要关注SDK的上报格式。
export type MiniProgramReport = | CustomReport | HttpReport | JsErrorReport | PageviewReport | PagePerformanceReport | AppLaunchPerformanceReport | PerformanceReport | SetDataReport export type ReportToReportEvent<T extends MiniProgramReport> = T & { extra?: Partial<CommonContext> // 允许额外上报一些context覆盖组装上下文 overrides?: Partial<CommonContext> } export type MiniProgramReportEvent = ReportToReportEvent<MiniProgramReport>
export interface Common { /** 应用标识 */ aid: number /** 页面标识 */ pid: string /** 页面访问标识,用于区别同一个 pid 的多次访问 */ view_id: string /** 用户标识,由接入方设定*/ user_id: string /** 用户操作id */ action_id?: string /** 自定义维度 */ context: { [key: string]: string } /** 当前页的url */ url: string /** 网络环境 */ network_type: string /** 客户端时间戳,发生时间 */ timestamp: number /** 当前事件命中的有效采样率 */ sample_rate: number /** @query sver 上报 SDK 版本 */ sdk_version?: string /** @query sname 上报 SDK 名称, 以区分第三方 SDK */ sdk_name?: string /** @query soffset 客户端时间偏移量, 协助服务端进行时间校准 */ sdk_offset?: number /** @query did 设备标识,保存在本地存储 */ device_id?: string /** @query sid 实例会话标识 */ session_id?: string /** @query menv 小程序平台环境版本 develop trial release (may be more) */ mini_env?: string /** @query mver 小程序线上版本 */ mini_version?: string /** @query model 设备型号 'iPhone 12 pro' */ model?: string /** @query brand 设备品牌 Iphone Apple */ brand?: string /** @query ratio 像素比 2 */ pixel_ratio?: number /** @query screen 屏幕宽高,单位px number * number, screenWidth * screenHeight */ screen_area?: string /** @query window 可使用窗口宽高,单位px number * number, windowWidth * windowHeight */ window_area?: string /** @query lang 语言 */ lang?: string /** @query osname 操作系统 */ os_name?: string /** @query osver 操作系统版本 */ os_version?: string /** @query libver 小程序基础库版本 */ lib_version?: string /** @query hostname 宿主名称: douyin、xigua、toutiao */ host_name?: string /** @query hostver 宿主版本号 */ host_version?: string /** @query scene 场景值 */ scene?: number /** @query platform 当前小程序宿主类型 wx | tt | my | swan */ platform?: string }
export interface CustomSend { /** custom */ ev_type: string payload: CustomPayload common: common.Common } export interface CustomPayload { /** 自定义名称, type 为 event时必填 */ name?: string /** 自定义数值 */ metrics?: { [key: string]: number } /** 事件本身的维度,不要跟外部 context 合并 */ categories?: { [key: string]: string } /** 自定义日志内容,可以是日志或者对象的 JSON 表示, type为log 时必填 */ content?: string /** 自定义日志的级别 debug | info | warn | error */ level?: string /** 自定义类型 event |log */ type: string }
export interface HttpSend { /** http */ ev_type: string payload: HttpPayload common: common.Common } export interface HttpPayload { /** request | uploadFile | downloadFile*/ api: string request: HttpReq response: HttpRes /** elapsed time from send to response calculate by SDK */ duration: number /** elapsed time for callback of (fail+success+complete) after responded */ cbTime: number extra?: { [key: string]: string } } export interface HttpReq { method: string url: string headers?: { [key: string]: string } body?: string timestamp: number } export interface HttpRes { /** 状态码 */ status: number /** 是否被 extraExtractor 包装过 */ is_custom_error: boolean headers?: { [key: string]: string } body?: string timing?: PerformanceTiming timestamp: number err_msg?: string } export interface PerformanceTiming { /** tt 暂时不支持 */ redirectStart?: number /** tt 暂时不支持 */ redirectEnd?: number /** tt 暂时不支持 */ fetchStart?: number domainLookupStart: number domainLookupEnd: number connectStart: number secureConnectionStart: number connectEnd: number requestStart: number requestEnd: number responseStart: number responseEnd: number /** 是否复用连接 */ socketReused: boolean /** tt 暂时不支持 当前网络的实际下载kbps */ throughputKbps?: number /** tt 暂时不支持 发送的字节数 */ sendBytesCount?: number /** tt 暂时不支持 收到字节数 */ receivedBytedCount?: number /** 使用协议类型,有效值:http1.1, h2, quic, unknown */ protocol?: string }
export interface JsErrorPayload { error: JsError breadcrumbs: Array<Breadcrumb> extra?: { [key: string]: string } react?: ReactInfo } export interface JsError { /** 错误名称 */ name?: string /** 错误信息 */ message: string /** 堆栈 */ stack?: string /** 错误文件名 */ filename?: string lineno?: string colno?: string } export interface Breadcrumb { /** route | http */ type: string /** methodName | url */ message: string /** errMsg | post,get | tap */ category: string /** route {url} | http {mehtod,url,status_code} */ data?: { [key: string]: string } timestamp: number } export interface ReactInfo { version: string componentStack: string }
export interface PageviewPayload { pid: string /** 触发类型 launch | show | history | user-set | hide | unload */ source: string }
export interface PagePerformancePayload { /** 路由开始时间 timestamp of invoke the method of route */ navigate_start: number /** 路由方法 navigateTo | navigateBack | redirectTo | reLaunchTo | switchTab | native (eg:nativeTabBar在app.json中配置,SDK拦截不到) */ navigate_name: string /** timestamp of page.onLoad invoked */ load_start: number /** timestamp of page.onShow invoked */ dom_end: number /** timestamp of page.onReady invoked */ render_end: number }
export interface AppLaunchPerformancePayload { /** timestamp of app triggered(wx/tt) */ trigger?: number /** timestamp of app.onLaunch */ init_end: number /** timestamp of app.onShow */ activate_start: number /** timestamp of page.onLoad */ page_load_start: number /** timestamp of page.onShow / default: 0 */ page_dom_end: number /** timestamp of page.onReady */ page_render_end: number }
export interface PerformancePayload { is_custom: boolean /** fr fp fcp lcp downloadPackage evaluateScript */ name: string /** perf => 传统性能 user => 用户手动打点 */ type: string /** elapsed time for current metric */ duration?: number /** timestamp */ value: number /** judging by SDK */ is_support: boolean /** auto increment,means the numbers of page loaded. Use it to distinguish between first time and others */ count: number }
export interface SetDataPayload { /** elapsed time of dom render after set data */ duration: number /** the data's size(byte) */ size?: number }