uniapp埋点 app/小程序

实现

1 uniapp 路由监听跳转,配合获取当前vue页面实例实现页面停留监控

2 获取当前页面实例并代理指定函数实现函数监控

3 埋点配置文件上传到oss实现在线配置 监控页面/函数

涉及到的uniapp和微信api

实现页面监控

//微信小程序监听路由跳转
wx.onBeforeAppRoute(page => { }); // 页面跳转前 
wx.onAppRoute(page => { }); // 页面跳转后
//app监听路由跳转
uni.addInterceptor(key,{ 
invoke(){ 
//页面跳转前 
}, 
returnValue(){
// 页面跳转后 
} 
});
//获取当前vue页面实例
getCurrentPages()

完全可以依靠上面的api结合你们的业务逻辑实现页面监控
注 onBeforeAppRoute 可能会有微信版本不支持 有兼容问题

实现函数监控

主要实现逻辑 是通过监听路由跳转并且获取到当前页面实例,然后劫持监听指定函数。
涉及到的api uniapp的getCurrentPages 和 js的api Proxy

let pages = getCurrentPages();
//防止重复代理 this[key] key是函数名称 ,this指向当前页面实例  可以在pages中获取pages.$vm
if (this[key] && !this[key]?.isProxy) { 
	this[key] = new Proxy(this[key], {
		get: (target, prop) = >{
			if (prop == 'isProxy') {
				return true
			} else {
				return target[prop];
			}
		},
		apply: function(target, thisArg, argumentsList) {
			const result = target.apply(thisArg, argumentsList); 
                        //监听到函数执行 下面写你的业务代码 
			return result;
		}
	});
	this.$forceUpdate(); // 不能去掉!!! 小程序没问题 但是app你代理之后不会改变的 需要强制刷新一下

我自己的在线配置json

我是通过这个文件 结合的上面的代码 在存储埋点数据之前获取一下配置文件 实现具体的业务逻辑 你们可以根据你们自己的业务逻辑自己定义
pageQuery是需要获取页面跳传递的参数 需要获取页面路径并截取 getCurrentPages().$page.fullPath 是当前页面路径

{
	"pagesGoods/details": { //需要配置的页面路径
		//页面名称
		"urlName": "商品详情",
		// 需要截取并上传的字段 支持字段映射 [['productListId','id']] 将获取到的productListId转为id字段上传
		"pageQuery": ["productListId"],
		//需要劫持监听函数
		"burialPointFns": {
			"loginOut": { //函数名
				"name": "退出登录" //函数名重命名字段
			}
		}
	}
}

欢迎加入群一起交流 👏

在这里插入图片描述

### UniApp 中实现埋点功能的方法 #### 使用 `uni-statistics` 插件进行自动化埋点 为了简化开发流程并提高效率,在项目初始化阶段可以通过集成第三方插件来完成基础的埋点工作。对于 UniApp 应用而言,`uni-statistics` 是一个不错的选择。该工具支持自动追踪应用内的各类交互行为而无需开发者额外编码。 在项目的入口文件 `main.js` 中加载此模块,并配置必要的参数以便于后续分析处理: ```javascript import uniStatistics from 'uni-statistics' Vue.use(uniStatistics, { appKey: 'your app key', // 替换为实际的应用密钥 autoTrack: true // 启动自动记录模式 }) ``` 上述设置使得应用程序能够捕捉用户的浏览路径以及页面间的转换情况[^1]。 #### 自定义事件的手动触发方式 除了依赖内置机制外,针对特定场景下的操作也可以由程序员自行设计相应的监测逻辑。比如当某个按钮被按下时发送一条消息给服务器端用于日志保存或者性能评估目的。此时可借助框架提供的 API 函数——`uni.report()` 来达成目标。 需要注意的是,默认情况下这些信息会被存入名为 `uni-stat-event-log` 的数据库表单里。如果希望将某些类型的统计数据隔离存放,则应该考虑采用更灵活的数据提交手段,例如利用 JQL 查询语句配合云函数执行更加复杂的任务流控制[^2]。 #### 页面生命周期钩子中的事件跟踪 另外一种常见的做法是在 App 或者 Page 组件内部重载其固有的生命周期回调方法(如 `onLoad`, `onShow`, `onHide`),从而实现在不同状态下向远程服务汇报当前状况的功能。下面的例子展示了怎样监听整个 APP 进程的状态变化并向外部传递信号: ```javascript // 文件位置:src/App.vue export default { ... onShow () { this.$eventAnalyse.analyse('appShow') }, onHide () { this.$eventAnalyse.analyse('appHide') } } ``` 这段代码片段说明了每当用户从前台切至后台或是相反方向移动时都会触发展示/隐藏通知的操作[^3]。 #### 跨页面导航期间的行为监控 最后值得一提的是关于多页之间流转过程中可能涉及到的一系列动作序列。假设存在三个连续访问的目标 A -> B -> C ,那么按照正常的顺序应该是这样的: - 用户打开 A 页面 (调用了它的 onLoad 方法) - 接着转向 B 页面 (这时既会结束前者的显示又开启了后者的内容呈现) - 再次前进到第三个目的地之前同样遵循相同的规律... - 当最终回到上一层级的时候则会先销毁最深层的对象再重建中间层实例[^4] 综上所述,通过以上几种途径相结合的方式几乎可以覆盖所有需要关注的重点环节,进而构建起一套完善可靠的数据收集体系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值