旅游软件定制开发方案
来源:广州软件开发 编辑:广州软件开发公司 日期:2020-05-14
本次共享主要介绍去哪儿的客户端团队在大规模多团队多APP的情景下,怎么快速简略可靠地保护自己的产品。
经过实际场景重现,介绍用户行为跟踪和网络数据交互的监控的相关内容,处理现在业界难以处理的计划如无埋点计算的搜集与提取,网络监控的Hook计划及无线远端测试等。
经过介绍去哪儿在处理产品和用户问题的过程,介绍相关体系的运用和技术内幕,启发大家在多前后端、跨团队的场景怎么更快的开发和保护APP,迅速定位处理问题。
APP闪退
许多普通用户在阅历APP闪退的时分,往往无法精确表述出APP呈现的问题,最多只能告知咱们机型或用户账号,以至于咱们能了解到的信息十分少。
毛病处理方法
咱们最需求知道的信息是用户闪退的时刻、闪退的具体页面和闪退的原因。但这些信息用户一般都不能提供,所以这时咱们就只能到各个体系里查询日志、拉毛病处理群,去“猜”毛病的原因。
人物改变
由于在事务过程中整个工作团队发生了很大的改变。开始遇到问题,几个人讨论一下基本就能处理;随着事务发展日渐庞大,从单个团队分成了多个团队;再到后来,不同开发方法的呈现导致每个人的职责和对APP的了解都十分片面,所以大家不能一目了然地知道问题出在哪儿。
页面刷不出来
关于页面刷不出来的问题,咱们现在最新的做法是进行用户的流程监控。
去哪儿网快速App开发及问题处理渠道实践
去哪儿网快速App开发及问题处理渠道实践
从图中能够看见用户具体进行了什么操作、在什么时刻做了什么事情。
咱们称之为“用户细查”。
每个页面还能翻开它具体恳求的状况,看到恳求耗时、时刻线,乃至能够翻开每个恳求看到接口恳求的后台体系经过哪些环节。
现在能够经过用户细查剖析问题呈现在哪个环节上,只需把对应环节的相关负责人招集到一同就能处理问题,不会像传统方法那样耗时很长,还耗费大量人力。
这儿涉及到的技术细节就有以下几种:
怎么知道用户的交互行为和渲染改变;
怎么知道用户的网络恳求和时刻线;
怎么能还原用户的场景;
怎样才能不影响事务代码的开发。
涉及到的体系——“筋斗云”
QAV是交互计算,QACR是反常监控,QTrace是用于监控网络恳求的整个流向。
去哪儿网快速App开发及问题处理渠道实践
交互行为和渲染改变
先从交互行为说起,首要要看监控的事情类型。事情类型分为APP生命周期事情、页面切换事情和交互事情三种。
定位控件在早年是用view-id的方法去做的,但这个方法十分的不靠谱,所以在那个年代常常会用手动埋点的方法进行操作。
后来有了坐标的方法,其实也没有比view-id好许多,尤其是在Andriod上,会由于各种机型不同、屏幕尺寸不一样而不精确。
在用了xpath一段时刻后发现,它在Andriod上不够稳定。体现在不同体系ROM里,它会对整个view数自行做一些厂商里定制的内容,乃至还有一些会主动增删内容。
所以咱们在xpath根底上做了一些改善,对xpath根底的页面和布局的界说采用了自界说格式去做。
无论采取哪种方法,数据都会有改变,所以咱们需求一个兼并数据项。
各个渠道xpath的款式是不同的。
去哪儿网快速App开发及问题处理渠道实践
在事务的开发过程中不能让它手动埋点,所以要采取Hook的方法。
去哪儿网快速App开发及问题处理渠道实践
Hook在不同渠道上有不同的方法。在IOS上能够用Runtime去做,而在Andriod上则要采用不一样的方法。
Andriod上其实也能用Runtime的方法做,但不是很好。由于它不是真正的运转期的Hook,它需求预插桩,对运转的效率会有影响。
所以运转期Hook运用的是InstantRun,在构建期Hook运用的是JavaAgent。
去哪儿网快速App开发及问题处理渠道实践
在IOS上注入代码很简略,在Andriod上就比较复杂了。
去哪儿网快速App开发及问题处理渠道实践
在构建过程中,Hook出构建的脚本,把一切预埋点参加Dex再打包,打完包的时分代码已经在真正输出的代码Dex里了。
去哪儿网快速App开发及问题处理渠道实践
这儿分为三部分,一部分是Agent,一个是Gradle插件,以及真正要修改插入内容的部分。
插入内容部分便是网络部分的监控以及用户行为上的监控,这些相关于Hook来说是事务层,所以咱们把它叫做Dex。
Agent本身是用来做Hook。
去哪儿网快速App开发及问题处理渠道实践
再来看一下咱们都Hook了哪些内容。最根底的网络部分便是恳求的时刻、状况,以及当前网络是Wifi仍是4G。
注入几个数据。
网络会根据不同的运用去注入不同的类型。由于一些前史遗留问题或第三方问题,必需求采用到不同网络恳求的结构。
在react-native里,会直接在react-native的结构层注入Hook的计划。
将各项数据聚合
怎么并发串联数据
咱们会有一个绑定用户行为与网络恳求的id。每个用户的交互行为都会生成一个id,下一次有网络数据的时分会把这个id带上去,这样哪个交互行为触发了用户恳求,就能把它们关联在一同。
Uuid用来做接口的调用栈的串联。每经过一层都会加一个自己的标识,这样就能够追寻到整个网络调用栈的状况。
校正过的time排序是用来把前面一切的行为让它以一个正确的顺序排列在一同。
去哪儿网快速App开发及问题处理渠道实践
一切用户日志统一以客户端本身的时刻进行排序。
日志上传
咱们会把交互日志和网络恳求日志紧缩打包后再上传。
崩溃或卡顿等反常日志实时上传。
去哪儿网快速App开发及问题处理渠道实践
这一套体系开发出来是为了满意开发、测试、发布、监控这一个完好流程来做的,能够确保用最少的人力做最多的事。
冰山一角——绑定数据项
绑定数据项便是给控件一个比较人性化的姓名,能够由非工作人员来完结。绑定完之后能够在日志行为中看到用户操作。
这样就极大减少了开发过程中关于计算类需求耗费的时刻。也避免了网络日志只有程序员看得懂的为难,能够让它自主地进行操作。
冰山一角——崩溃聚合
咱们发现外面主流做搜集的厂商往往不能更完好地搜集到一切需求的错误,咱们是经过一整套的方法把它们搜集在一同。
相关阅读