详解如何拦截iOS所有网络请求-创新互联
背景
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、成都网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的莎车网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!最近在研究iOS无埋点
统计技术,我们的统计SDK
主要分两部分:点击事件和网络请求。统计所有的点击事件是采用Method Swizzling
实现的,可以做到使用中不需要一行代码实现统计所有事件,具体细节将来我会专门抽几篇文章介绍。
今天主要说说如何统计APP中的所有网络请求。公司网络请求如果不是静态库
或者框架
,很容易想到在网络请求发送和返回时添加统计的代码。如何在不修改原来代码(或者修改最少)的基础上拦截所有的请求呢,能不能从系统层面上拦截回调呢?答案是肯定的,苹果有一个黑魔法NSURLProtocol
。
介绍
NSURLProtocol是iOS URL Loading System中的一部分,看起来像是一个协议,但其实这是一个类,而且必须使用该类的子类,并且需要被注册。先看看他在URL Loading System中的位置:
使用场景
不管是UIWebView还是URLSession还是第三方的AFNetWorkong
、Alamofire
或者SDWebImage
他们都是基于URLSession
或者NSURLConnection
来实现的,因此可以通过NSURLProtocol做自定义操作。
- 重定向网络请求
- 拦截网络加载,采用本地缓存
- 修改Request信息
- 自定义返回结果
- 对请求进行HTTPDNS解析,动态设置Host,解决不同网络下客户端不能访问的情况
实现
首先要继承NSURLProtocol创建自定义的类,然后重写startLoading、stopLoading添加我们的统计代码就可以了:
static NSString * const hasInitKey = @"LLMarkerProtocolKey"; @interface LLMarkerURLProtocol : NSURLProtocol @end
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前名称:详解如何拦截iOS所有网络请求-创新互联
文章路径:http://azwzsj.com/article/csgphg.html