小程序 SDK

更新时间:
复制 MD 格式

SDK接入流程概览

步骤

集成内容

本文中的位置

是否必选

第一步

SDK获取

查看文档「第1步下载SDK」

必选

第二步

开发配置

查看文档「第2步开发配置,配置小程序域名白名单」

必选

第三步

SDK集成

查看文档「第3步集成-方式一、方式二,根据自身小程序选择何时的集成方法」

必选

第四步

设置初始化参数

查看文档 [第3步初始化参数说明-appKey,设置应用唯一标识」

必选

查看文档 [第3步初始化参数说明-dsn,设置收数服务地址」

必选

在集成前需要先获取appKey。

1. 下载SDK

下载SDK安装包,解压ZIP包后放到小程序源码工程中,以备引用。

2. 开发配置

2.1 微信小程序后台配置

    1. 添加微信小程序域名白名单,(域名白名单为apm服务部署的收数域名)。

      操作入口:开发管理->开发设置-> 服务器域名->修改->填写request合法域名

      在微信中操作如下图所示:

    2. image

    3. image

    4. image

    1. 若暂时无法配置域名白名单,开发阶段可先在小程序编辑器的面板中勾选不校验合法域名。

      操作步骤如下图所示:image.png

2.2 支付宝配置

  1. 设置域名白名单(域名白名单为apm服务部署的收数域名)。image.png

  2. 若暂时无法配置域名白名单,开发阶段可先在小程序编辑器的面板中勾选不校验合法域名。image.png

3. SDK集成

初始化即代表开启统计功能,在app.js顶部开始位置引用第1步下载的sdk,集成方式支付宝和微信相同,微信引用wx开头的文件,支付引用alipay开头的文件,按照下面的方式来集成。

如图所示,其中cjs为commonjs封包,一般在原生小程序中通过require引用,esm为es模块封包,一般使用import来引用,开发者根据自己的业务情况选择合适的引入方式。

3.1 方式一声明式写法,适用于原生小程序开发

esm 引入方式

// esm 引入方式 import { init } from './build/wx.esm';
import { init } from './build/wx.esm'

init({
  appKey: '您应用的唯一标识',
  dsn: '收数域名',
  debug: true, //开启调试日志
  version:'x.y.z' //设置应用版本号
})

commonjs 引入方式

// commonjs 引入方式如下
require('./build/wx.cjs');
App({
  umengConfig: {
    appKey: '您应用的唯一标识',
    dsn:'收数域名',
    debug: true, //开启调试日志
    version:'x.y.z' //设置应用版本号
  }
});

3.2 方式二命令式写法

适用于uni-app、taro等三方框架

// commonjs 引入方式如下
const uapm = require('./build/wx.cjs');
uapm.init({
  appKey: '您应用的唯一标识',
  dsn:'收数域名',
  debug: true, //开启调试日志
  version:'x.y.z' //设置应用版本号
});

4. 初始化参数说明

name

是否必填

含义

类型

支持平台

appKey

是

应用唯一标识

string

微信支付宝

dsn

是

apm小程序采集服务部署地址,收数域名

string

微信支付宝

debug

否

是否打印调试日志

boolean

微信支付宝

version

否

开发者应用版本,若不填写,则自动获取小程序发布的版本,若填写,则使用开发者填写的版本

string

微信支付宝

pageFilter

否

页面过滤器,通过黑白名单方式过滤页面日志,如果命中,则该页面所有日志包括错误请求等都被过滤

IFilter

微信支付宝

errorFilter

否

错误过滤器,通过黑白名单方式过滤错误日志

IFilter

微信支付宝

apiFilter

否

请求过滤器,通过黑白名单方式过滤请求日志

IFilter

微信支付宝

rumConfig

否

全链路请求header注入配置

RumConfig

微信支付宝

IFiler类型说明

pageFilter、errorFilter 和 apiFilter 均继承自 IFilter 接口,分别用于以下过滤目标:

  • pageFilter:用于过滤页面路径(path)

  • errorFilter:用于过滤堆栈信息

  • apiFilter:用于过滤请求的 URL

您可以设置采集项的白名单或黑名单策略,二者选其一:

  • 若选择白名单方式,则仅符合规则的页面会被采集

  • 若选择黑名单方式,则符合规则的页面将被排除,不会被采集

此项非必须参数,用于判断是否过滤日志,包含如下属性。

属性

含义

默认

类型

mode

匹配模式

当值为ignore,表示黑名单模式,命中规则的不上报 、当值为match,表示白名单模式命中规则的上报

ignore

枚举值 ignore|match

rules

匹配规则集合,当类型为string时,表示包含当页面URL包含该字符串时命中规则;当类型为Funtion,该函数返回true表示命中规则,false表示未命中规则;当类型为数组时,表示规则集合,规则之间为或的关系,只要任意一个规则命中,则规则集命中。

[],该默认值表示黑名单为空,日志全部上报

string | RegExp | Function | Array<string | RegExp | Function>

RumConfig类型说明

此项非必须参数,用于判断是否过滤日志,包含如下属性。

属性

含义

默认

类型

injectTraceHeader

SDK会对小程序网络请求注入对应的请求头,并且自动生成相关协议字段

undefined

枚举值

'traceparent' | 'b3' | 'sw8' | 'sentry-trace' | undefined

needTracedUrls

全链路监控注入Urls白名单,默认值为null

null,该默认值表示白名单为空,如果设置此值,则仅符合规则的请求url会被注入请求头

Array<string | RegExp>

ignoredUrls

全链路监控注入Urls黑名单,默认值为null

null,该默认值表示黑名单为空,如果设置此值,则仅符合规则的请求url 不会被注入请求头

Array<string | RegExp>

injectSDKRequest

是否对SDK内部请求注入请求头,默认为false,即不注入

false,该默认值表示SDK的内部请求url不会被注入请求头

boolean

实例方法说明

当引入SDK初始化后会在全局挂载实例$umapm对象,可分别通过wx.$umapm my.$umapm 调用以下方法。

含义

类型

示例

支持平台

setUserid

设置用户ID

Function

$umapm.setUserid('xxxx')

微信支付宝

setPageFilter

通过设置采集页面黑白名单,过滤采集上报的页面

Function

$umapm.setPageFilter({

mode: 'match',

rules: ['/home']

})

微信支付宝

setApiFilter

通过设置采集请求黑白名单,过滤采集上报的错误

Function

$umapm.setApiFilter({

mode: 'ignore',

rules: ['/getUserInfo']

})

微信支付宝

setErrorFilter

设置采集错误黑白名单

Function

$umapm.setErrorFilter({

mode: 'ignore',

rules: ["script error"]

})

微信支付宝

captureException

主动上报错误堆栈

Function

try{

throw new Error('错误') } catch (exception) { $umapm.captureException(exception);

}

微信支付宝

5. 案例

案例1

支持App umengConfig自定义属性设置配置参数:

// wechat
const umapm = require('./wx.cjs');

App({
  umengConfig: {
    appKey: '应用唯一标识',
    dsn:'收数域名',
    debug: true,
    version:'x.y.z',
    debug: true,
    pageFilter: {
      mode: 'match',
      rules: ['/home']
    }
  },
  onLaunch: function () {
    wx.request({
      url: "https://xxx/getUserId",
      method: "post",
      success: (res) => {
        wx.$umapm.setUserid(res.data.userid);
      }
    })
  }
});

案例2

支持实例init方法配置初始化:

// wechat
var umapm = require('./wx.cjs');
umapm.init({
  appKey: '应用唯一标识',
  dsn:'收数域名',
  debug: true,
  version:'x.y.z',
  debug: true,
  pageFilter: {
    mode: 'match',
    rules: ['/home']
  }
});

App({
  onLaunch: function () {
    wx.request({
      url: "https://xxx/getUserId",
      method: "post",
      success: (res) => {
        wx.$umapm.setUserid(res.data.userid);
      }
    });
  }
});

案例3

uni-app框架下利用条件编译集成SDK:

// 初始化的参数配置
// #ifdef MP-WEIXIN
import { init } from "./wx.esm";
init({
  appKey: '应用唯一标识',
  dsn: '收数域名',
  version:'x.y.z',
  pageFilter: {
    mode: "ignore", 
    rules: []
  },
});
// #endif

// #ifdef MP-ALIPAY
import { init } from "./alipay.esm";
init({
  appKey: '应用唯一标识',
  dsn: '收数域名',
  version:'x.y.z',
  pageFilter: {
    mode: "ignore", 
    rules: [] 
  },
});
// #endif

// #ifdef H5
import { init } from "./apm";
init({
  pageFilter: { mode: "ignore", rules: [] },
  pid: "H5应用唯一标识",
  logLevel:3,
});
// #endif

在main.js中引入uapm.js

import Vue from 'vue'
import App from './App'
import './uapm';

Vue.config.productionTip = false

App.mpType = 'app'

const app = new Vue({
  ...App
})
app.$mount()