移动应用统计分析-countly客户端源码分析

Countly客户端分析

一.  代码结构域功能分析


 
1.  MainActivity:测试入口
2.  AdvertisingIdAdapter 
3.  ConnectionProcessor 网络连接传输
4.  ConnectionQueue 传输队列
5.  Countly 技术核心类
6.  CountlyStore 统计数据存储本地实现
7.  DeviceId DeviceId 用户id
8.  DeviceInfo DeviceInfo系统信息
9.  Event 用户自定义事件
10.  EventQueue 自定义事件队列
11.  MessagingAdapter 客户端消息接收适配器
12.  OpenUDIDAdapter UDID适配器
13.  ReferrerReceiver
14.  UserData 用户信息
15.  OpenUDID_manager UDID产生
16.  OpenUDID_service  产生






二.  执行图分析

图片描述



1.  SharedInstace为Countly提供的单例对象,也是统计数据的入口
onTimer()方法在Countly对象构造时启动,默认每60秒调用一次
对外通过Countly.sharedInstance()方法取得单例对象,并通过init方法初始化


2.  系统统计信息在触发和每隔定时时间并发送给服务器,自定义事件通过EventQueue暂存在本地,并通过Timer定时发送给服务器,或当EventQueue的事件数大于设置时调用发送(默认10).发送事件完成后从本地删除事件
网络连接通过ConnectionQueue->ConnectionPssor发送


3.  发送数据格式为打包成JSON发送.




4.  在数据发送末尾会加上唯一deviceId为后缀,以标识用户
默认提供的deviceId为ANDROID_ID,这个ID作为设备的唯一识别码是不可靠的,后期可以考虑改为UUID


5.  UserData的实现为我们提供了得到统计信息人员的相关信息




三.  源码分析


1.  入口函数
 
得到Countly实例,并初始化


2.  记录自定义事件,分为实时记录和延时记录
 


3.  Countly的启动与停止
 


4.  设置用户信息
 


5.  Countly对象实例化过程
 
Countly对象在实例化过程中绑定了connectionQueue对象,并创建了一个线程池,使其每隔TIMER_DELAY_IN_SECONDS时间执行一次onTimer方法.默认60秒执行一次


6.  Countly初始化过程
 
在这里需要注意的是关于deviceId,默认设置的为null,可以自定义为其设值,UID的type这里是通过去判断是否存在OpenUDID_manager这个类判断其TYPE.
 
在实际的初始化过程中,先进行了容错的判断,然后实例并初始化EVENT队列,deviceID,以及对连接队列进行初始化


7.  OnTimer()
 
OnTimer()方法主要完成两件事:1,更新系统信息 2,发送自定义事件记录信息
其中更新系统信息中的参数代表了距上次更新相隔多少时间,具体算法如下:
 
8.  updateSession()
 
updateSession()方法执行了更新系统系统信息的操作,需要注意的是,它首先拼接了数据,并将数据存储在本地,再由tick()方法发送.存储在本地的方法只是将其格式化为JSON格式,并存储在preferences中,这里就不再详细说明了.
9.  Tick()方法
 
Tick()方法将需要发送数据提交给了另一个线程单独进行,在这里使用Future可以保证每次的发送都是独立的.实际上的数据发送交给了ConnectionProcessor去处理
























10.  ConnectionProcessor.run()
 
ConnectionProcessor.run()方法是网络连接与发送数据最核心的地方,其中先将待发送的数据拼接上用户ID,得到并创建连接,发送数据,保存发送状态.需注意的是,在发送成功后,会清除掉本地保存的数据,如果发送失败,则保留数据,以备后续发送
注意:发送给服务端的数据均是JSON格式.


至此,数据发送流程已基本清楚,线面我们来分析countly服务启动,关闭以及自定义事件埋点


11.  服务启动
 


12.  
四.  
Countly 是一个实时的、开源的移动分析应用,通过收集来自手机的数据,并将这些数据通过可视化效果展示出来以分析移动应用的使用和最终用户的行为。截至2019年,支持超过2500个网站,16000个移动应用程序和多个桌面应用程序。它从移动,桌面,Web收集数据包括Apple Watch,TvOS和其他互联网连接设备的应用程序,并将这些信息可视化以分析应用程序使用情况和最终用户行为。 借助于Javascript SDK,Countly是一个Web分析平台,其功能与移动SDK相当。 Countly有两个部分:收集和分析数据的服务器,以及发送此数据的SDK(移动,Web或桌面)。该存储库包括Countly Community Edition(服务器端)。 Countly具有以下功能: 1、完整的仪表板用户界面 2、用户,应用程序和权限管理 3、读/写API 4、基于插件的架构 5、移动,网络和台式机的分析功能 6、iOS和Android的崩溃报告以及Javascript的错误报告 7、适用于iOS和Android的丰富且交互式的推送通知 8、电子邮件报告 Countly特点: 1、实时移动分析,Web分析和推送通知。 2、您的数据,规则-因为您可以在自己的服务器上安装Countly,或者让我们为您做私有云部署。 3、可通过开源插件进行配置和扩展。 4、现代且易于使用的基于Web的仪表板,着重于用户体验,这使得轻而易举地获得复杂的见解。 5、跟踪2500多个网站和16000个移动应用程序。 6、在全球范围内收集超过600亿个数据点。   Countly移动分析应用 更新日志: v20.11.2 修正 [分析]固定顶部计算在所有地方都相同 [api]用于汇总指标的更多汇总数据检查 [api]删除事件中所有尾随的$符号 [configs]修复更新配置时的刷新值 本地调用的[config]子目录用例 [崩溃]更新了应用程序版本列标题 [export]使用内部请求处理器而不是localhost进行请求导出 [logger]删除SDK不匹配警告,因为它们应完全兼容 [populator]将populator标记添加到所有生成的用户 [推送]批量发送邮件删除 [推送]处理其他凭证的自动补全 [推动]连续检查多个“发送”按钮的点击次数 [推送]修复高并发情况下不成功的消息编译 [推送]全面支持交易通知 [push]在某些情况下缺少通知标题 [推送]预览中缺少个性化工具提示 [push]到期说明的用词修复 [报告]修复从子目录正常工作时的链接 [服务器状态]更改了dp报告的格式 [资料来源]固定直接计算逻辑 [星级]反馈贴纸样式错误已修复 [视图]修复名称中带有点的视图后处理 [视图]固定视图导出文件名 [视图]在图形工具提示中显示视图名称 企业修复 [active_users]强调活动用户总数是平均值 [属性]修复了在广告系列详细信息的期间更改中获取数据的问题 [block]修复了显示内部事件名称的问题 [群组]固定的800,000个用户限制 [同类群组]减少同类群组计算的内存使用量 [群组]连续执行任务 [并发用户]修复了视图中的数据细分 [仪表盘]允许单个应用程序,多个事件,单个指标 [练习]允许为数字和日期选择“或” [练习]将用户属性视图名称更改为上一个视图 [练习]修复第53周的问题 [钻探]在多个BY查询中固定的唯一用户数 [公式]修复了无桶情况下的视觉错误 [漏斗]固定的“时间”数字显示不正确 [人口]热点图固定 [retention_segments]用户合并分片修复 [survers]修复了再次可见调查时的错误 [调查]固定的导出调查数据显示为[对象对象] [用户]将“ fac”列更改为“首次见面”,将“ fs”列更改为“首次会话” [用户]正确显示购买数据 [用户]修复同类群组查询以进行导出 改进之处 [警报]添加对数据点警报的支持 [api]添加新指标,制造商 [崩溃]将二进制图像视图添加到CE [填充器]允许覆盖 [推]添加了搜索以选择列表 [推送]对附件HEADING的代理支持 [安全]在登录表单上添加启用/禁用自动完成功能 [server-stats]添加了命令行支持 企业改进 [崩溃]自动崩溃符号 [仪表盘]将选定的事件限制从3更改为5 [流程]添加maxSampleSize的配置 [公式]也允许选择数字用户属性 [组]允许对用户进行多组分配 [挂钩]添加对某些内部事件的处理,例如视图,崩溃,性能等 [ldap]单独的ldap插件 [性能监控]允许在性能监控中自定义时间过滤 [推送]添加事件细分以推送个性化选项 [retention_segments]添加了最小加权计算方法 [调查]允许自定义徽标上传 [调查]允许重复
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值