[发明专利]一种基于iOS应用的轻量级解耦式埋点方法及装置在审
申请号: | 202011084482.5 | 申请日: | 2020-10-12 |
公开(公告)号: | CN112230903A | 公开(公告)日: | 2021-01-15 |
发明(设计)人: | 金小俊;赵化;李卫丽 | 申请(专利权)人: | 上海赛可出行科技服务有限公司 |
主分类号: | G06F8/30 | 分类号: | G06F8/30;G06F11/36 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 200131 上海市浦东新区自由贸*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 ios 应用 轻量级 解耦式埋点 方法 装置 | ||
1.一种基于iOS应用的轻量级解耦式埋点方法及装置,其特征在于,所述装置包括埋点配置JSON表和埋点SDK,具体埋点方法如下:
一、配置埋点信息
埋点配置JSON表中包含需要hook的类名class和具体的事件event信息,event中包括hook的方法和对应的埋点值;通过AOP的方式物理隔离埋点代码和业务代码,避免埋点的逻辑侵入污染业务逻辑;埋点包括固定埋点和需要逻辑判断的场景化埋点,对于场景化埋点,需要提供一个impl类来提供相应的逻辑判断;
二、固定埋点场景:
对于固定的埋点,只需要在对应的方法执行时直接记录埋点,具体方法为利用iOS系统的runtime来实现AOP,通过MethodSwizzling机制来hook相应的类和方法;为了便于检测无效的埋点,还需对hook的类和方法进行匹配校验,若类中没有对应的方法,则抛出断言;
三、场景化埋点:
场景化埋点主要为同一事件但是在多种状态或逻辑下不同埋点的情况,本发明通过提供一个protocol由埋点impl类来实现,根据不同的逻辑判断,返回对应的埋点值;埋点实现类的类名需要与埋点配置JSON中的event里的key保持一致;
四、状态判断:
根据状态量来确定埋点值;根据订单种类和订单状态来返回对应的埋点值,首先定义JSON表中同名的impl类,并遵循RJEventTracking协议;
五、入参判断:
需要根据JSON中设置的所hook方法的入参来确定埋点名称的情况,比如在订单列表中点击全部、进行中、待支付、待评价、已完成菜单项时分别埋点;被hook的方法为tripLabClickWithLabKey:其参数为UILabel,原先代码中通过Label的tag判断是点击的哪个子项,同样,可以获取到Label的入参然后据此判断,由于参数只有一个,所以可以直接取arguments第一个值;通过AOP来hook方法时,可以获取到当前hook方法所对应的实例对象和入参,在调用协议方法时,直接传给协议实现类;
六、方法调用:
和读取属性值类似,也是在不同场景下同一事件不同埋点名称的情况,但获取的状态量不是当前实例对象的,而是某个方法的返回值,这种情况下可以通过埋点SDK提供的方法调用函数来实现;
七、逻辑判断:
对于需要额外添加逻辑判断的场景,比如在订单详情页需要统计用户进入页面的查看行为,但是详情页的类型需要在网络请求后才能获取,而且该网络请求会定时触发,所以埋点hook的方法会走多次,该情况下,需要添加一个属性用来标记是否已记录埋点,故而埋点SDK需要提供动态添加属性的功能;在埋点实现impl类里面,添加额外的属性来标记是否已记录过埋点;使用addExtraProperty:defaultValue:来给当前实例动态添加属性,而extraProperty:方法则用来获取实例的某个额外属性,如果isRecorded返回YES代表已经记录过该埋点,返回nil值来忽略该次埋点;
八、动态下发埋点配置:
埋点JSON配置表可以由服务器提供接口,客户端在每次启动时通过接口获取最新埋点配置表,从而达到动态下发的目的,客户端拿到JSON后,读取埋点信息并生效;读取埋点配置的逻辑为遍历埋点中的类和hook的方法,并检测是固定埋点还是场景化埋点,对于场景化埋点的情况查询是否有对应的埋点impl实现类,当然,还需检测JSON配置表的合法性,每个类和其中的方法是否匹配。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海赛可出行科技服务有限公司,未经上海赛可出行科技服务有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011084482.5/1.html,转载请声明来源钻瓜专利网。