信不过你开车
信不过你开车
  • 发布:2022-09-30 10:58
  • 更新:2022-09-30 10:58
  • 阅读:2259

uniapp 全埋点实现思路【uni-cli】

分类:uni-app
  • 背景
    a. 目前公司针对C端项目埋点要求较高,在项目中手动埋点使得代码冗余杂长;
    b. 其他基于原生开发小程序已实现全埋点处理,为了统一需要再uni也采用相同方案;

  • 思路
    拦截点击、页面访问等事件,统一上报埋点信息

  • 方案
    调试跟踪发现基于uni-cli开发项目,最终编译成原生小程序代码,核心处理是在common/vendor.js;
    而common_vendor目前并未找到在运行时能够拦截处理的方案,感兴趣的同学也可以研究一下;
    继续跟踪,点击事件是执行patchMPEvent方法处理,咱们只需要对该方案做处理即可达到相同效果;
    其他事件思路同理;

  • 代码

    // plugin/tlog.ts  
    import { PluginOption } from 'vite';  
    /** 点击后拦截插入代码,event为点击对象 */  
    const injectClickCode = `  
    console.log(event);  
    if(event.type === 'tap'){  
    tlog?.track("auto_track_click",'auto',{message: 'just a demo click'});  
    };  
    `;  
    export const VitePluginInjectTlogAutoTrack: () => PluginOption = () => ({  
    name: 'auto-tlog-track',  
    renderChunk(code, chunk) {  
    let tempCode = code;  
    if (chunk.fileName === 'common/vendor.js') {  
      const regx = new RegExp(/patchMPEvent\(event\) {([\s\S]*)/);  
      tempCode = code.replace(regx, `patchMPEvent(event){  
        ${injectClickCode};  
      $1`);  
    }  
    return tempCode;  
    }  
    });
    // vite.confg.ts  
    import { VitePluginInjectTlogAutoTrack } from './plugins/tlog';  
    export default defineConfig(({ command, mode }) => ({  
    plugins: [uni(), VitePluginInjectTlogAutoTrack()]  
    }));
1 关注 分享
1***@qq.com

要回复文章请先登录注册