作为一名Android开发者,经常会接到项目经理提出的收集用户信息的需求,而且对于普通开发者来说,也需要收集一些真实用户的信息来辅助开发或者进行优化。
为产品经理收集信息
主要收集的内容是一些用户操作,比如进入了某个页面,点击了某个按钮什么的。作用是帮助产品经理修改UI设计,改善用户体验。但是产品经理一般不会使用SQL语句,所以他们不会直接去挖掘数据库里的数据,而是借助Amplitude,Google analysis,mixpanel,AppFlyer等第三方的数据收集网站来帮助统计。开发者这边需要将这些第三方网站提供的SDK导入到项目中,然后在某些节点上比如click事件中添加语句,传一些key-value,一般包括事件的名称,user的id等等。下面举几个例子。
用户的登录,首先要记录用户因为什么事件进行的登录,是点赞,预订,评论,还是其他,并且还要加上点赞,评论的东西的id,然后要记录是在哪个页面进行的登录,使用何种方式进行的登录,邮件,facebook,twitter等。然后要记录登录成功与否,失败的原因等等。
这样的记录遍布项目,几乎每个按钮,每个页面,每次和服务器的交互都会进行记录,而且不光是在一个三方平台进行记录(怕不准)经常是Amplitude和Google analysis上同时记录。
当然这样做也由很多弊端,下面列举一下:
1、对于开发来说,工作枯燥无味,每个记录都是重复劳动,极其枯燥,是我最讨厌的一种需求,一般来说每期任务中会有200-300条这样的记录需求,而且会好多期这样的任务,不胜其烦。
2、在记录各种参数的时候,常常会碰到一些空指针导致的crash。
3、因为收集信息过于频繁,需要经常向第三方网站发送一些信息,跑了许多的流量,而且在流程上向第三方网站记录数据完毕后才会执行相关的请求,也就是说用户需要多等待一部分时间,而这部分的等待时间是他所不需要的,而且会受第三方网站的速度限制。
4、由于网络问题,版本问题等诸多原因,第三方网站上记录的数据千差万别,比如对于同一个点击事件的记录,Amplitude记录一次,Google analysis记录一次,但是两个平台的结果出来千差万别,主要原因是因为两个平台添加记录的版本不同,所以用户量也不一样,所以出来的结果往往差距很大,这样让产品经理非常头痛,不知道该如何做决策。
5、第三方平台仅仅给出了一些无关痛痒的数据,比如某个事件收到的次数,还有代码里添加的key-value值,只能用第三方平台提供的功能十分简陋的页面看一些简单的数据,如果要想把各种数据关联起来,难度非常大,而且由于第三方平台没有提供数据库,也不支持sql查询,进行数据挖掘几乎不可能。
6、测试成本极高,因为三方平台对于一个事件的记录往往有延迟,某些特殊事件比如安装卸载要等好几天才能看到结果,所以测试的时间开销非常巨大。即使是一些即时显示的数据,由于需要不停的刷新,而这些三方平台的网络往往很慢,非常考验测试人员的耐心。
客户端的开发都会比较在意用户手机的配置和性能,我喜欢收集的配置有以下几点
为开发者收集信息
(1)用户屏幕分辨率,因为一些UI控件经常需要考虑屏幕适配的问题,太大或者太小的屏幕都会然显示效果变得不一样,搞清楚各类屏幕的占比有利于开发者掌握重点
(2)用户SDK版本分布。不同的Android版本在UI和性能表现上都会不一样,掌握用户SDK分布占比能很好的设置targetVersion和minVersion
(3)用户手机品牌,型号.获得用户的手机品牌不仅可以做相应的优化,还可以观察到用户群体的消费能力和收入阶层。
(4)屏幕DPI,一些控件在过密或过疏的屏幕中显示可能会异常,需要获得这部分受灾用户占比以便做出决策
(6)RAM,ROM大小,这是一个手机性能的重要指标,到底是做一个界面酷炫内存消耗大的应用,还是做一个结构简单内存小的应用,需要参考这个指标
为后台开发者收集信息
(1)每个用户调用的网络接口的名称,以及HTTP请求结束的时间,响应码:记录下每个HTTP接口的请求速度,方便后台开发人员针对特定接口进行优化。
(2)每个HTTP请求返回json字符串的长度。过长的字符串会增加网络失败的概率,收集一些超长的接口为后面的开发工作提供引导。
(3)用户的网络情况,比如是2G,3G,4G还是wifi信号,以及相应的信号强度。查看在不同的网络状态下,配合前面的记录身临其境的感受用户的状态,进行有针对性的优化
(4)手机CPU的型号,32位版本还是64位版本,这一项主要是为了在编译.so库的时候要不要对一些64位CPU编译新的库,还有armeabi的v7a和v8版本的选择
(5)另外还需要收集手机的imei,手机网卡的mac地址,userId等用于区分不同的客户和设备。