埋点性能阐明
计划利用于uniapp小程序商城类我的项目1. 页面浏览事件调用封装的跳转办法主动解决2. 页面参数主动增加(页面url,页面参数,触发工夫等),平台公共参数主动增加(用户信息,平台标识等)3. 点击事件和接口申请事件须要各位自行在代码增加
路由跳转封装办法eventRoute
import eventAnalyse from "@/common/eventAnalyse.js";const navigateTo = (url) => { const link = getCurrentPages()[getCurrentPages().length - 1].route; eventAnalyse.analyse('hide', {url: link}) let _url = typeof url == 'object' ? url.url : url uni.navigateTo({ url: _url, animationType: 'pop-in', animationDuration: 300, success: function(res) { eventAnalyse.analyse('show', {url: _url}) } });}const redirectTo = (url) => { const link = getCurrentPages()[getCurrentPages().length - 1].route; eventAnalyse.analyse('hide', {url: link}) let _url = typeof url == 'object' ? url.url : url uni.redirectTo({ url: _url, animationType: 'pop-in', animationDuration: 300, success: function(res) { eventAnalyse.analyse('show', {url: _url}) } });}const reLaunch = (url) => { const link = getCurrentPages()[getCurrentPages().length - 1].route; eventAnalyse.analyse('hide', {url: link}) let _url = typeof url == 'object' ? url.url : url uni.reLaunch({ url: _url, success: function(res) { eventAnalyse.analyse('show', {url: _url}) } });}const switchTab = (url) => { const link = getCurrentPages()[getCurrentPages().length - 1].route; eventAnalyse.analyse('hide', {url: link}) let _url = typeof url == 'object' ? url.url : url uni.switchTab({ url: _url, success: function(res) { // eventAnalyse.analyse('show', _url) } });}const navigateBack = (num) => { const link = getCurrentPages()[getCurrentPages().length - 1].route; eventAnalyse.analyse('hide', {url: link}) uni.navigateBack({ delta: num });}export default { navigateTo, redirectTo, reLaunch, switchTab, navigateBack}
事件处理封装办法eventAnalyse
import * as common from './common.js' //引入commonimport * as db from './db.js' //引入dbimport api from '@/apiConfig/api.js'import { pageCode } from './pageCode.js' //页面编码字典 /** * @description 路由跳转行为剖析 * @param {*} triggerType 事件类型 ,必传 'show' || 'hide' || 'click' || 'response' || 'quit' || '自定义事件' * @param params 事件参数 */const analyse = (triggerType = "", params = {}) => { let startTime, // startTime 进入页面工夫 leaveTime, // leaveTime 来到页面工夫 stayTime, // stayTime 停留时长 url, //以后页面url toUrl, //将要跳转的url page_params, //页面参数 cityObj = db.get('cityObj'), userInfo = db.get('userInfo'); if (!triggerType) return switch (triggerType){ case 'show': const _url = params.url startTime = new Date().getTime() leaveTime = '' db.set('startTime',startTime) page_params = params.url ? getArgs(params.url) : {} url = getUrl() toUrl = _url.indexOf('?') != -1 ? _url.split('?')[0] : _url break case 'hide': startTime = db.get('startTime') leaveTime = new Date().getTime() stayTime = leaveTime-startTime url = getUrl() break case 'tabBarShow': startTime = new Date().getTime() leaveTime = '' db.set('startTime_tabBar',startTime) url = getUrl() break case 'tabBarHide': startTime = db.get('startTime_tabBar') leaveTime = new Date().getTime() stayTime = leaveTime-startTime url = getUrl() break case 'quit': startTime = db.get('startTime') leaveTime = new Date().getTime() url = getUrl() //标记用户曾经跳出 isQuit = true console.log('跳出') break case 'click': startTime = new Date().getTime() url = getUrl() case 'response': startTime = new Date().getTime() url = getUrl() } const tabBar = [ 'pages/index/index', 'pages/class/index', 'pages/welfare/index', 'pages/goods-car/goods-car', 'pages/ucenter/index' ] if (triggerType == 'show') { return false } // 避免tabBar页面onHide触发两次事件上报 if (triggerType == 'hide' && tabBar.indexOf(params.url) != -1) { return false } const logData = { logVersion: "0.1.0", joinEvents: triggerType, client: db.constParams.platform, userId: userInfo.uuid ? userInfo.uuid : '', sessionId: db.get('sessionId'), deviceId: db.get('deviceId'), city: cityObj.cityCode, area: cityObj.towncode, startTime: common.timeToDate(startTime), stayTimeStr: stayTime ? common.msToDate(stayTime) : 0, stayTime: stayTime ? parseInt(stayTime/1000) : 0, endTime: leaveTime ? common.timeToDate(leaveTime) : common.timeToDate(startTime), pageUrl: url, pageId: pageCode[url], pageParams: page_params, ...params } let userLog = db.get('userLog') ? db.get('userLog') : [] userLog.push(logData) db.set('userLog',userLog) if ((stayTime && stayTime > 5*1000*60) || userLog.length > 100) { console.log('埋点数据提交') console.log('...') api.analysisData(userLog).then(()=> { db.del('userLog') }) }}function getArgs(urlArgs) { let params,url,result,reqDataString if (urlArgs.indexOf("?") != -1) { url = urlArgs.split("?")[1] result = url.replace(/&/g, '","').replace(/=/g, '":"') reqDataString = '{"' + result + '"}' params = JSON.parse(reqDataString) return params } else { return params = {} }}function getUrl() { const pages = getCurrentPages() const currentPage = pages[pages.length - 1] const url = currentPage.route return url} export default { analyse}
全局注册办法
import eventRoute from "@/common/eventRoute.js";import eventAnalyse from "@/common/eventAnalyse.js"Vue.prototype.$eventRoute = eventRoute;Vue.prototype.$eventAnalyse = eventAnalyse;
页面浏览类事件
this.$eventRoute.navigateTo ({ url: '/pages/index/index'});
点击类事件
// 点击购物车事件,page_id 为事件名称 必传this.$eventAnalyse.analyse('click', { page_id:'cart_btn',paramsA:'',paramsB:''})
接口申请事件
// 退出购物车接口申请事件,page_id 为事件名称 必传this.$eventAnalyse.analyse('response',{ page_id:'cart_add',paramsA:'',paramsB:'')