Skip to content

上报格式

如果使用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
}

Released under the MIT License.