改基类
QAPM是去哪儿使用的APP监控系统。已在内部稳定运行3年。提供功能如下:网络请求时长、网络数据流量、网络请求成功或失败以及失败原因等。帧率检测、CPU使用率、电池电量。
支持iOS8以上版本
包含头文件#import "QAPManager.h"
#import "QAPManager.h"
在程序启动didFinishLaunchingWithOptions调用初始化方法,参数均必传。
didFinishLaunchingWithOptions
pid 产品号,假设公司有多个APP,用此区分 cid 渠道标识,比如越狱渠道、App Store、自己分发等等 vid 版本号,程序版本号,一般内部使用 uid 设备号,唯一区分一台设备,比如idfa + (void)startWithPid:(nonnull NSString *)pid cid:(nullable NSString *)cid vid:(nullable NSString *)vid uid:(nullable NSString *)uid;
Reachability.m
目前大多工程一般都包含了Reachability.m文件,为了避免链接错误,没有将Reachability.m放入本工程。如果你的工程没有包含Reachability.m,请将本工程目录的QAPM/Monitor/Reachability.m 加入工程中参与编译;如果已经包含请无视这里
QAPM/Monitor/Reachability.m
/** 域名过滤,当请求的url.absoluteString包含set的内容时,不上传监控数据。实时生效 域名比如 苹果网站:www.apple.com , 或者更具体的 www.apple.com/watch ,但是前者已包含后者 */ @property (nonatomic, strong) NSArray<NSString *> *domainFilterList;
比较通用的策略:一般有三种
我们采用第二种,第三种作为辅助。不使用第一种主要是因为兼容性不好,如果另外一个人也实现了NSURLProtocol,他也拦截,那我们就拦截不了了。除非他能再把这个请求重新发一遍,但是这样就对代码侵入太多了。
NSURLSessionTaskMetrics 时间信息全,且准确,比较真实的网络请求时间(用hook方法,会有延时,特别是请求多,CPU繁忙时)。只是官方只支持NSURLSession且iOS10以后,想监控iOS8、iOS9、NSURLConnection就需要使用私有API了,有上架风险。且[NSURLSession sharedSession]也没有找到合适的解决方案实现监控。
[NSURLSession sharedSession]
总结下:
hook方式获取网络的请求时长,流量、状态。iOS10以后NSURLSession 的非[NSURLSession sharedSession]发出请求用NSURLSessionTaskMetrics方式作为补充。因为它计算出来的流量、网速更真实。而hook计算出来的更贴近开发者,也更贴近用户的体验感受,两者各有用途。
整体统计范围:
一些过滤:
如果想查看,存的日志可以:
+ (QCacheStorage *)releaseLogInstance;
#import "QCacheStorage.h"
/// 获取当前所有文件名 - (void)fileLists:(QGetFileListCompleteBlock)block; /// 根据文件名,删除一个文件 - (void)deleteFile:(NSString *)fileName; /// 存储文件到本地或者 - (void)saveData:(NSDictionary *)data toFile:(NSString *)fileName; /// 根据文件名获取文件 - (void)fileDataWithFile:(NSString *)file withCompleteBlock:(QGetFileDataCompleteBlock)block;
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
功能介绍
QAPM是去哪儿使用的APP监控系统。已在内部稳定运行3年。提供功能如下:网络请求时长、网络数据流量、网络请求成功或失败以及失败原因等。帧率检测、CPU使用率、电池电量。
如何使用
支持iOS8以上版本
包含头文件
#import "QAPManager.h"在程序启动
didFinishLaunchingWithOptions调用初始化方法,参数均必传。Reachability.m目前大多工程一般都包含了
Reachability.m文件,为了避免链接错误,没有将Reachability.m放入本工程。如果你的工程没有包含Reachability.m,请将本工程目录的QAPM/Monitor/Reachability.m加入工程中参与编译;如果已经包含请无视这里网络数据收集部分
比较通用的策略:一般有三种
我们采用第二种,第三种作为辅助。不使用第一种主要是因为兼容性不好,如果另外一个人也实现了NSURLProtocol,他也拦截,那我们就拦截不了了。除非他能再把这个请求重新发一遍,但是这样就对代码侵入太多了。
NSURLSessionTaskMetrics 时间信息全,且准确,比较真实的网络请求时间(用hook方法,会有延时,特别是请求多,CPU繁忙时)。只是官方只支持NSURLSession且iOS10以后,想监控iOS8、iOS9、NSURLConnection就需要使用私有API了,有上架风险。且
[NSURLSession sharedSession]也没有找到合适的解决方案实现监控。总结下:
hook方式获取网络的请求时长,流量、状态。iOS10以后NSURLSession 的非
[NSURLSession sharedSession]发出请求用NSURLSessionTaskMetrics方式作为补充。因为它计算出来的流量、网速更真实。而hook计算出来的更贴近开发者,也更贴近用户的体验感受,两者各有用途。统计范围
整体统计范围:
一些过滤:
存储上传部分大致实现
如果想查看,存的日志可以:
#import "QAPManager.h"+ (QCacheStorage *)releaseLogInstance;#import "QCacheStorage.h"中提供一下方法: