如何将小程序手动埋点升级为自动埋点技术?

2026-04-06 21:001阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1454个文字,预计阅读时间需要6分钟。

如何将小程序手动埋点升级为自动埋点技术?

前言:小程序由于封闭性较强,要像Web应用一样实现灵活的数据收集,可能会存在一定难度。目前开源的埋点SDK,一般采用手动埋点的形式,这种方式的侵入性较强。为了解决这一问题,我们可以考虑以下方案。

方案:采用自动化埋点技术,通过分析小程序的运行逻辑,自动识别用户行为和数据变化,实现数据的实时收集和上报。这种方式具有以下优势:

1. 降低侵入性:无需手动修改代码,减少了对小程序原有功能的干扰。

2.提高效率:自动化收集数据,节省开发时间和人力成本。

3.灵活性:支持多种数据收集方式,满足不同场景的需求。

具体实现步骤如下:

1. 分析小程序的业务逻辑,确定需要收集的数据类型和事件。

2.选择合适的自动化埋点工具或SDK。

如何将小程序手动埋点升级为自动埋点技术?

3.将工具或SDK集成到小程序中,并进行配置。

4.测试数据收集效果,确保数据准确无误。

5.根据实际需求,优化埋点策略。

通过以上方案,我们可以实现小程序的灵活数据收集,为后续的数据分析和应用提供有力支持。

前言

小程序由于封闭性较强,要像web应用一样实现灵活的数据收集,会有一定难度。目前开源的埋点SDK,一般采用手动埋点的方式,这种方式有较强的侵入型,为了解决这个问题就有了该文章。

手动埋点

以腾讯移动分析的SDK为例,如果要记录埋点信息,只要插入一句代码即可

// 例如,记录搜索行为 search(keyword) { if (keyword) { ...业务代码 } mta.Event.stat("ico_search", {"query":keyword}); }

示例代码看起来是比较简洁的,但是埋点需要收集的数据往往不是单一的,复杂的埋点代码插入业务代码,会 影响代码的阅读体验 ,而且 埋点代码散落在各个地方,不方便管理 。

由于手动埋点必须插入到函数中,有时候我们为了获取页面某一元素点击信息,产生了一种叫无业务相关埋点,简单来说就是你的函数定义,就只有埋点代码,当这种埋点频繁出现, 代码会被严重污染 。

// wxml <view bindtap="track">这只是一个展示view</view>

//js track() { mta.Event.stat("eleClick", {"name":xxxxx}); }

另外,由于PM会频繁调整埋点信息,而 埋点是一个繁琐又无聊的工作 ,基于Don't Repeat Yourself 原则,手动埋带要不得。

总结以上,手动埋点有下列问题

  • 影响代码的阅读体验
  • 埋点代码散落在各个地方,不方便管理
  • 代码会被污染
  • 埋点是一个繁琐又无聊的工作

自动埋点

实现思路:监听用户点击-->读取埋点配置JOSN,判断是否需要上报--> 上报数据

1、小程序监听用户点击行为

web应用监听用户点击行为是比较容易,但是小程序没有提供Dom的事件监听,不过我们可以通过事件冒泡的方式捕获。

// web监听页面点击 document.addEventListener('click',(e) => {console.log(e)}) // 小程序监听页面点击,用户的点击行为都会执行elementTracker方法 <view catchtap='elementTracker'> <view class='buy-now'> <button bindtap='buy' animation="{{scaleAnim}}">立即购票</button> </view> </view>

2、判断点击位置是否落在监听元素中

假设需要监听用户是否点击class为buy-now元素,可以通过获取buy-now元素长宽,定位和点击位置坐标判断是否出现重叠,以判断是否被点击。

/** * 判断点击是否落在目标元素 * @param {Object} clickInfo 用户点击坐标 * @param {Object} boundingClientRect 目标元素信息 * @param {Object} scrollOffset 页面位置信息 * @returns {Boolean} */ export const isClickTrackArea = function (clickInfo, boundingClientRect, scrollOffset) { if (!boundingClientRect) return false; const { x, y } = clickInfo.detail; // 点击的x y坐标 const { left, right, top, height } = boundingClientRect; const { scrollTop } = scrollOffset; if (left < x && x < right && scrollTop + top < y && y < scrollTop + top + height) { return true; } return false; };

3、通过配置表声明埋点

为了解决代码入侵问题,可以将所有埋点信息统一管理,通过配置表的方式,除了方便管理,以后还可以做到动态配置,在服务端配置完毕下发到客户端。

const tracks = { path: 'pages/film/detail', elementTracks: [ { element: '.buy-now', // 声明需要监听的元素 dataKeys: ['film.filmId'], // 声明需要获取Data下的哪些数据 }, ] };

4、对页面函数埋点

有些场景我们除了对页面元素点击埋点,还要对页面函数进行埋点,例如用户下拉刷新的时候,可以对原方法进行包装,插入埋点代码。

rewritePage() { const originPage = Page; Page = (page) => { Object.keys(page).forEach((methodName) => { // 执行埋点逻辑 typeof page[methodName] === 'function' && this.recordPageFn(page, methodName); }); // 执行原Page对象 return originPage(page); }; }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

标签:实现

本文共计1454个文字,预计阅读时间需要6分钟。

如何将小程序手动埋点升级为自动埋点技术?

前言:小程序由于封闭性较强,要像Web应用一样实现灵活的数据收集,可能会存在一定难度。目前开源的埋点SDK,一般采用手动埋点的形式,这种方式的侵入性较强。为了解决这一问题,我们可以考虑以下方案。

方案:采用自动化埋点技术,通过分析小程序的运行逻辑,自动识别用户行为和数据变化,实现数据的实时收集和上报。这种方式具有以下优势:

1. 降低侵入性:无需手动修改代码,减少了对小程序原有功能的干扰。

2.提高效率:自动化收集数据,节省开发时间和人力成本。

3.灵活性:支持多种数据收集方式,满足不同场景的需求。

具体实现步骤如下:

1. 分析小程序的业务逻辑,确定需要收集的数据类型和事件。

2.选择合适的自动化埋点工具或SDK。

如何将小程序手动埋点升级为自动埋点技术?

3.将工具或SDK集成到小程序中,并进行配置。

4.测试数据收集效果,确保数据准确无误。

5.根据实际需求,优化埋点策略。

通过以上方案,我们可以实现小程序的灵活数据收集,为后续的数据分析和应用提供有力支持。

前言

小程序由于封闭性较强,要像web应用一样实现灵活的数据收集,会有一定难度。目前开源的埋点SDK,一般采用手动埋点的方式,这种方式有较强的侵入型,为了解决这个问题就有了该文章。

手动埋点

以腾讯移动分析的SDK为例,如果要记录埋点信息,只要插入一句代码即可

// 例如,记录搜索行为 search(keyword) { if (keyword) { ...业务代码 } mta.Event.stat("ico_search", {"query":keyword}); }

示例代码看起来是比较简洁的,但是埋点需要收集的数据往往不是单一的,复杂的埋点代码插入业务代码,会 影响代码的阅读体验 ,而且 埋点代码散落在各个地方,不方便管理 。

由于手动埋点必须插入到函数中,有时候我们为了获取页面某一元素点击信息,产生了一种叫无业务相关埋点,简单来说就是你的函数定义,就只有埋点代码,当这种埋点频繁出现, 代码会被严重污染 。

// wxml <view bindtap="track">这只是一个展示view</view>

//js track() { mta.Event.stat("eleClick", {"name":xxxxx}); }

另外,由于PM会频繁调整埋点信息,而 埋点是一个繁琐又无聊的工作 ,基于Don't Repeat Yourself 原则,手动埋带要不得。

总结以上,手动埋点有下列问题

  • 影响代码的阅读体验
  • 埋点代码散落在各个地方,不方便管理
  • 代码会被污染
  • 埋点是一个繁琐又无聊的工作

自动埋点

实现思路:监听用户点击-->读取埋点配置JOSN,判断是否需要上报--> 上报数据

1、小程序监听用户点击行为

web应用监听用户点击行为是比较容易,但是小程序没有提供Dom的事件监听,不过我们可以通过事件冒泡的方式捕获。

// web监听页面点击 document.addEventListener('click',(e) => {console.log(e)}) // 小程序监听页面点击,用户的点击行为都会执行elementTracker方法 <view catchtap='elementTracker'> <view class='buy-now'> <button bindtap='buy' animation="{{scaleAnim}}">立即购票</button> </view> </view>

2、判断点击位置是否落在监听元素中

假设需要监听用户是否点击class为buy-now元素,可以通过获取buy-now元素长宽,定位和点击位置坐标判断是否出现重叠,以判断是否被点击。

/** * 判断点击是否落在目标元素 * @param {Object} clickInfo 用户点击坐标 * @param {Object} boundingClientRect 目标元素信息 * @param {Object} scrollOffset 页面位置信息 * @returns {Boolean} */ export const isClickTrackArea = function (clickInfo, boundingClientRect, scrollOffset) { if (!boundingClientRect) return false; const { x, y } = clickInfo.detail; // 点击的x y坐标 const { left, right, top, height } = boundingClientRect; const { scrollTop } = scrollOffset; if (left < x && x < right && scrollTop + top < y && y < scrollTop + top + height) { return true; } return false; };

3、通过配置表声明埋点

为了解决代码入侵问题,可以将所有埋点信息统一管理,通过配置表的方式,除了方便管理,以后还可以做到动态配置,在服务端配置完毕下发到客户端。

const tracks = { path: 'pages/film/detail', elementTracks: [ { element: '.buy-now', // 声明需要监听的元素 dataKeys: ['film.filmId'], // 声明需要获取Data下的哪些数据 }, ] };

4、对页面函数埋点

有些场景我们除了对页面元素点击埋点,还要对页面函数进行埋点,例如用户下拉刷新的时候,可以对原方法进行包装,插入埋点代码。

rewritePage() { const originPage = Page; Page = (page) => { Object.keys(page).forEach((methodName) => { // 执行埋点逻辑 typeof page[methodName] === 'function' && this.recordPageFn(page, methodName); }); // 执行原Page对象 return originPage(page); }; }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

标签:实现