GQNetWork
继承形式的网络请求框架,一步到位,支持流量统计,支持https请求,请求数据缓存机制,支持链式调用,支持model版本控制,支持block,delegate返回请求数据。
##设计图
1.GQNetwork网络请求部分架构图
2.GQNetwork数据缓存与解析及其他小模块设计图
简单使用
CocoaPods
1.在 Podfile 中添加 pod 'GQNetWork'。
2.执行 pod install 或 pod update。
3.添加一个类继承 GQDataRequest,详见demo。
*注: 如果只需要单独的 mapping 类,可以在 Podfile 中单独添加 pod 'GQMapping'
基本用法
1. 将GQNetWork文件夹添加到工程中。(详见示例)
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(缓存键)和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
在iOS9及以上系统需要添加plist字段,否则无法发起请求。
NSAppTransportSecurity
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
##支持
欢迎指出bug或者需要改进的地方。欢迎提出issues、加入Q群交流iOS经验:578841619,我会及时作出回应。觉得好用的话不妨给个star吧,你的每个star是我持续维护的强大动力。