微信小程序埋点上报工具 WxTrack 完全指南

1,129 阅读4分钟

微信小程序埋点上报工具 WxTrack 完全指南

一个功能全面、使用简便的微信小程序埋点上报插件,支持元素点击自动埋点、函数调用埋点、滚动曝光埋点、页面访问埋点等多种埋点方式,让你的小程序数据分析能力提升一个档次!

📌 猛戳 GitHub 查看完整代码

项目介绍

WxTrack 是为微信小程序量身定制的埋点SDK,它能够帮助开发者轻松实现以下功能:

  • 元素点击自动埋点,无需手动在每个点击事件中添加埋点代码
  • 页面访问埋点,自动追踪用户进出页面行为
  • 函数调用埋点,监控关键业务函数执行
  • 视图区域曝光埋点,追踪内容展示情况
  • 丰富的用户属性设置功能,满足个性化分析需求
  • 兼容插件模式,适应各种小程序开发场景

目录结构

├── _tests_                    # 单元测试
├── dist                       # 打包文件
│   ├── wxtrack-es.js          # ES 模块文件
│   ├── wxtrack.min.js         # 通用模块化
├── src                        # 源代码
│   ├── helper.js              # 页面操作
│   ├── report.js              # 埋点数据操作
│   ├── wrapper.js             # Page/App对象操作
│   ├── index.js               # 入口文件
├── .gitignore                 # git的忽略配置文件
├── package.json               # npm 包配置文件,依赖包信息
├── .babelrc                   # babel 配置
├── rollup.config.js           # rollup 配置
├── README.md                  # SDK介绍

使用指南

1. 安装引入

从 GitHub 下载源码,将 dist 目录下的文件复制到你的项目中。

2. 在 app.js 中初始化

// 引入埋点SDK
import Tracker from './tracks/wxtrack.min';
// 引入埋点配置信息,请自行参考tracks目录下埋点配置修改
import { eventConfig } from './tracks/config.js';

// 初始化
const report = new Tracker({
    tracks: eventConfig,      // 埋点配置
    base_url: 'https://xxxxxx', // 上报接口地址
    appid: 'xxxxxx',          // 小程序appid
    appkey: 'xxxxxx',         // 小程序appkey
    debug: '0'                // 是否开启调试模式,1-开启,0-关闭
});

// 小程序需要设置openid
getToken() {
  // 请求接口后设置
  // ...
  report.openid = openid || '' // 设置openid作为埋点用户唯一标识
}

// 导出report,方便其他页面使用
report() {
  return report
}

3. 配置埋点信息

tracks/config.js 文件中配置埋点信息:

/**
 * 埋点配置说明:
 * path: 页面路径
 * elementTracks: 页面元素埋点
 *    - element: 目标元素选择器
 *    - eventName: 上报事件名称
 *    - dataKeys: 目标埋点数据,传数组第一个参数为页面元素定义的数据data-xxx,第二个参数为上传参数,非数组默认传data
 * methodTracks: 执行函数埋点
 *    - method: 函数名
 *    - eventName: 上报事件名称
 *    - dataKeys: 目标埋点数据
 * 
 * 注意: 如果配置了元素获取埋点,则需要最外层包裹view并加上方法catchtap="elementTracker"
 */
export const eventConfig = [
  {
    path: 'pages/newHome/newHome',
    elementTracks: [
      {
        element: '.banner',
        eventName: 'bannertest',
        dataKeys: ['imgUrls', ['$dataset.src', 'url_var']],
      }
    ],
    methodTracks: [
      {
        method: 'goToAd',
        eventName: 'bannertest',
        dataKeys: ['data'],
      }
    ],
  }
]

4. 在页面WXML中添加埋点监听

为了使元素点击埋点生效,需要在页面最外层添加监听方法:

<view catchtap='elementTracker'>
  <!-- 页面内容 -->
  <view class="banner" data-src="banner1.jpg">Banner 1</view>
  <view class="banner" data-src="banner2.jpg">Banner 2</view>
</view>

5. 单独使用埋点上报

除了自动埋点外,你还可以在任何地方手动调用埋点上报:

// 简单上报埋点数据
report.track("点击banner图", { banner_id: "123", position: "home" })

// 链式调用,上报用户属性
report.userSetOnce({"address":"井湾子街道"}) // 只设置一次,已有值时忽略
      .userSet({ name_test:"张三", age:18 }) // 设置/覆盖用户属性
      .userUnset("name_test")                // 清空指定用户属性
      .userAdd({age:1})                      // 数值属性累加操作
      .trackUserData()                       // 最终上报

6. 滚动视图区域曝光埋点

监控用户滚动时元素进入视图区域的曝光事件:

// 页面js头部引入方法并初始化
const report = getApp().report() 

Page({
  data: {
    listData: []
  },
  
  onLoad() {
    // 加载数据后初始化监听
    this.getListData().then(() => {
      this.initObserver(this.data.listData);
    })
    
    // 初始化监听
    report.initObserver()
  },
  
  /**
   * 初始化监听元素
   * 在接口返回数据并渲染后调用
   */
  initObserver(data) {
    report.delObserver() // 断开之前的监听
    data.forEach(item => {
      // 参数1: 元素节点选择器
      // 参数2: 上报事件名称
      // 参数3: 自定义上报参数
      report.ElObserver('#img'+item.id, 'case_browse', {
        url_var: item.oss_thumb_photo_url
      })
    })
  },
  
  /** 
   * 监听页面滚动事件,更新 IntersectionObserver 实例 
   */
  onPageScroll: function (e) {
    this.initObserver(this.data.listData);
  }
})

7. 页面进出自动埋点

监听页面跳转,自动上报页面进入和退出事件:

// 在app.js中加入以下代码
report.track("view_access") // 埋点上报,进入小程序

// 监听页面进入和退出
report.watchRoute({
  pageIn: 'view_access',   // 进入页面上报事件名
  pageOut: 'view_address'  // 离开页面上报事件名
}) 

8. HTML/CSS内容过滤

如果你的数据库不支持HTML和CSS,可以使用内置的过滤方法:

const content = report.filterHTMLandCSS(this.data.content)

9. 特殊前缀说明

在埋点数据中,可以使用以下特殊前缀获取数据:

  • $APP - 表示读取App下定义的数据
  • $DATASET.xxx - 表示获取点击元素,定义data-xxx中的xxx值
  • $INDEX - 表示获取列表,当前点击元素的索引

需要获取$INDEX时,需要在wxml中加入data-index={{index}}标记

<view class='playing-item' data-index="{{index}}" wx:for='{{playingFilms}}'></view>

10. 兼容插件模式

由于SDK会改写Page对象,如果使用了插件,微信会禁止改写,可以通过以下方式改造:

// 初始化插件模式
const tracker = new Tracker({ 
  tracks: trackConfig, 
  isUsingPlugin: true 
});

// 将原来的App包装
tracker.createApp({
  // 原App对象
  onLaunch() {
    // 启动逻辑
  }
})

// 将原Page包装
tracker.createPage({
  // 原Page对象
  data: {},
  onLoad() {
    // 页面加载逻辑
  }
})

高级功能示例

1. 用户行为路径分析

通过组合使用页面埋点和元素点击埋点,可以构建完整的用户行为路径:

// 定义埋点配置
export const eventConfig = [
  {
    path: 'pages/home/home',
    elementTracks: [
      {
        element: '.category-item',
        eventName: 'category_click',
        dataKeys: [['$dataset.id', 'category_id'], ['$dataset.name', 'category_name']],
      },
      {
        element: '.search-bar',
        eventName: 'search_click',
      }
    ]
  },
  {
    path: 'pages/product/detail',
    elementTracks: [
      {
        element: '.buy-now',
        eventName: 'buy_click',
        dataKeys: ['productInfo'],
      },
      {
        element: '.add-cart',
        eventName: 'cart_add',
        dataKeys: ['productInfo'],
      }
    ]
  }
]

2. 自定义维度分析

你可以添加自定义维度来丰富埋点数据:

// 在每次上报前添加公共属性
report.registerPreProperties({
  channel: 'wx_mini',
  version: '1.2.3'
})

// 设置用户动态属性
report.registerDynamicProperties(() => {
  return {
    timestamp: Date.now(),
    network_type: getNetworkType()  // 假设有获取网络类型的函数
  }
})

3. A/B测试分组埋点

结合A/B测试功能,可以实现不同方案数据对比:

// 根据用户ID分配A/B测试组
const abTestGroup = report.openid.charCodeAt(0) % 2 === 0 ? 'A' : 'B';

// 设置为公共属性
report.registerPreProperties({
  ab_test_group: abTestGroup
})

// 在代码中根据分组展示不同内容
if (abTestGroup === 'A') {
  // 展示方案A
} else {
  // 展示方案B
}

// 埋点上报时会自动带上分组信息
report.track('feature_usage', { feature_name: 'new_ui' })

性能考量

WxTrack SDK经过优化,将对小程序性能的影响降至最低:

  1. 采用懒加载策略,仅在需要时初始化埋点组件
  2. 数据上报采用批量处理和节流控制,减少网络请求
  3. 自动过滤敏感信息,保护用户隐私
  4. 支持离线缓存,在网络恢复后自动上报

结语

WxTrack 埋点SDK为微信小程序提供了完整的用户行为分析解决方案,通过简单配置就能实现全面的数据采集。无论是产品迭代优化,还是用户行为分析,都能提供有力的数据支持。

如果你在使用过程中遇到任何问题,欢迎提交 Issue 或联系作者。

别忘了给项目点个 Star ⭐,你的支持是我持续更新的动力!


作者:corn