GQNetWork
继承形式的网络请求框架,一站式的解决方案,支持流量统计,支持 HTTPS 请求,请求数据缓存机制,支持链式调用,支持模型版本控制,支持 block 和 delegate 返回请求数据。
##设计图
1.GQNetwork 网络请求部分架构图
2.GQNetwork 数据缓存与解析及其他小模块设计图
简单使用
CocoaPods
1.在 Podfile 中添加 pod 'GQNetWork'。
2.执行 pod install 或 pod update。
3.添加一个继承自 GQDataRequest 的类,详见 demo。
*注意:如果只需要单独的映射类,可以在 Podfile 中单独添加 pod 'GQMapping'
基本使用
1. 将GQNetWork文件夹添加到项目中。(请参考demo)
2. 添加一个继承自GQDataRequest的类,在继承类的.m文件中覆盖以下基本方法,便可以在需要使用的页面中发起请求
//请求的url
- (NSString*)getRequestUrl;
//host
- (NSString *)getBaseUrl;
//请求方法
- (GQRequestMethod)getRequestMethod;
3. 在需要发起请求的页面引入继承类,添加使用block的请求方法(如需使用delegate或其他方法,请参考GQBaseDataRequest头文件)
[DemoHttpRequest requestWithOnRequestFinished:^(GQBaseDataRequest *request, GQRequestResult *result) {
NSLog(@"%@",result.rawResponse);
} onRequestFailed:^(GQBaseDataRequest *request, NSError *error) {
NSLog(@"%@",error);
}];
HTTPS支持
使用类继承GQBaseDataRequest并覆写以下方法
- (NSData *)getCertificateData
{
return [NSData dataWithContentsOfFile:证书文件];
}
自定义数据解析 原始数据->OC对象
1. 使用类继承GQBaseDataRequest并覆写以下方法
- (GQRequestDataHandler *)generateRequestHandler;
2. 使用一个自定义类继承自GQRequestDataHandler类,覆写以下方法,在该方法中实现自己的解析流程
- (id)parseDataString:(NSString *)resultString error:(NSError **)error;
数据缓存
1. 通过提供的方法将值分别传入cacheKey(缓存key)和cacheType(缓存类型),即可实现简单的UserDefault或者文件缓存,也可以缓存到内存中。2. 在使用缓存数据时,可以通过类继承GQBaseDataRequest并覆写以下方法,来判断是否使用缓存数据
- (BOOL)onReceivedCacheData:(NSObject*)cacheData
假数据的使用
1. 使用类继承GQBaseDataRequest并覆写以下方法,返回是否使用假数据,默认不使用
- (BOOL)useDumpyData;
2. 如果上述方法返回"yes"则使用假数据,然后覆写以下方法返回假数据,默认为json字符串
- (NSString*)dumpyResponseString;
网络状态判断以及网络状态改变通知
1. 本框架自带网络状态判断和网络改变通知。 (1) 使用以下方法获取网络状态
GQNetworkStatus status = [GQNetworkTrafficManager sharedManager].networkStatus;
网络状态分为以下三种
typedef NS_ENUM(NSInteger, GQNetworkStatus) {
GQNotReachable = 0,//无网络链接
GQReachableViaWiFi=2,//使用wifi链接
GQReachableViaWWAN=1//使用移动蜂窝网链接
};
(2) 如需用网络状态改变的通知,可添加以下代码以获取网络状态的实时改变
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkChange:) name:kGQNetWorkChangedNotification object:nil];
- (void)networkChange:(id)data {
GQNetworkStatus status = [GQNetworkTrafficManager sharedManager].networkStatus;
}
加载提示框
1.本框架自带加载提示框,若需使用,则通过提供的方法将需要显示提示框的父view传递给indicatorView。
Hard Use
前面的配置和Simple Use一样,还有高级用法。
链式调用 全程点语法支持
[DemoHttpRequest1 prepareRequset]
.requestUrlChain(@"product/list")
.onFinishedBlockChain(^(GQBaseDataRequest * request, GQMappingResult * result){
GQDPRINT(@"%@",result.rawResponse);
})
.onFailedBlockChain(^(GQBaseDataRequest * request, NSError * error){
})
.parametersChain(@{})
.startRequestChain();
#warning
在iOS 9以上系统,需要添加plist字段,否则无法发送请求。
NSAppTransportSecurity
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
##Support
欢迎指出bug或需要改进的地方,欢迎提出issue或加入QQ群交流iOS经验:578841619,我会及时作出回应。如果觉得好用,不妨给个star吧,你的每个star都是我持续维护的强大动力。