上报格式
如果使用beforeSend 等生命周期,在生命周期中对上报数据进行操作,那么需要关注SDK 的上报格式。
ReportEvent
js
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>
Common
js
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
}
CustomReport
js
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
}
Http
js
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
}
JS Error
js
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
}
Pageview
js
export interface PageviewPayload {
pid: string
/** 触发类型 launch | show | history | user-set | hide | unload */
source: string
}
PagePerformance
js
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
}
AppLaunchPerformance
js
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
}
Performance
js
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
}
setData
js
export interface SetDataPayload {
/** elapsed time of dom render after set data */
duration: number
/** the data's size(byte) */
size?: number
}