美文网首页
小程序从手动埋点到自动埋点

小程序从手动埋点到自动埋点

作者: cinoliu | 来源:发表于2020-08-07 09:49 被阅读0次

    一、前言

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

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

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

    // web监听页面点击

    document.addEventListener('click',(e) => {console.log(e)})

    // 小程序监听页面点击,用户的点击行为都会执行elementTracker方法

    <view catchtap='elementTracker'>

      <view class='buy-now'>

        <button bindtap='buy' >立即购买</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/detail/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);

        };

      }


    源码地址:https://github.com/cinoliu/eventTracking

    日记本

    相关文章

      网友评论

          本文标题:小程序从手动埋点到自动埋点

          本文链接:https://www.haomeiwen.com/subject/vdaxdktx.html