ZSNetWorking 0.0.5

ZSNetWorking 0.0.5

safiri 维护。



  • safiri

ZSNetWorking

AFNetworking(TODO:YYCache)的简单二次封装,封装了常见的GET、POST、文件上传/下载和网络状态监测。

介绍


1.主要类介绍:

  • ZSNetWorking

    网络请求发起类,是对ZSNetRequest的简单封装,提供常用的方便的 GET、POST、文件上传/下载 类方法。

    适用于常用的一般请求。

  • ZSNetRequest

    网络请求发起类,根据ZSRequestModel类实例中对请求的配置进行网络请求。

    类实例代表单个网络请求,并存储请求任务的hash值,可根据此取消网络请求任务。

    并利用runtime可将请求绑定到发起请求的对象实例(id)cancelControl,当对象实例(id)cancelControl dealloc时,自动取消绑定的网络请求,防止资源浪费及未知bug。

  • ZSRequestModel

    网络请求配置类,自定义配置所有网络请求任务。

    根据实际开发,仍需扩展及优化。

  • ZSServiceProtocol

    服务器配置协议,统一规定服务器的根URL、加密方式、加密密钥、解析方式等配置,可能要扩展并优化。

    使用场景:不同项目的后台服务(或统一项目需要有不同的后台服务)中的URL、加密方式、密钥、业务数据解析方法不同,可遵守协议后根据实际项目自定义服务器配置类,满足自定义需求。

    例子

    
     @interface ZSMobService : NSObject <ZSServiceProtocol> 
     	...
     @end
    
     @implementation ZSMobService
    
     - (NSString *)apiBaseUrl {
     	return ...;
     }
     - (void)parseResult:(id)jsonResult requestModel:(ZSRequestModel *)requestModel parseCompletionHandler:(ZSNetWorkingResponseCompletion)completionHandler {
         NSMutableArray *resultArray = [NSMutableArray array];
         NSString *responseCode = @"0";
         NSString *responseMessage = @"";
         
         解析业务数据...
    
         completionHandler(resultArray, responseCode, responseMessage);
     }
    
     @end
     
    
  • ZSNetEngine

    网络请求引擎,主要封装 AFNetworking 的请求方法。

  • ZSNetConnectMonitorUtil

    监听网络连接状态工具,当网络关闭时代理回调返回网络关闭提示。 TODO:WiFi和流量切换监听

使用方法

GET
	
    //ZSMobService 为自定义服务类
    ZSRequestModel *model = [[ZSRequestModel alloc] init];
    model.serviceClass = [ZSMobService class];
    model.methodURL = @"car/brand/query";
    model.paramDictionary = @{@"key":@"209bdde75fab1"};
    
    [ZSNetWorking GETRequestModel:model cancelControl:self completion:^(NSArray * _Nonnull resultArray, NSString * _Nonnull responseCode, NSString * _Nonnull responseMessage) {
        NSLog(@"responseMessage - %@",responseMessage);
        NSLog(@"resultArray - %@",resultArray);
    }];

POST
    
    //ZSCheFuService 为自定义服务类,提供根URL、秘钥、解析方法等自定义配置
    ZSRequestModel *model = [[ZSRequestModel alloc] init];
    model.serviceClass = [ZSCheFuService class];
    model.methodURL = @"init.do";
    NSString *key = model.service.symmetricEnDecryptionKey;
    NSString *gIv = model.service.symmetricEnDecryptionIv;
    NSLog(@"key - %@",key);
    NSLog(@"gIv - %@",gIv);
    
    //...
    //通过一系列配置、加密、签名,得到下面的请求参数
    NSString *reqDataString = @"...";
    model.paramDictionary = @{@"reqData":reqDataString,
                              @"serviceName":@"serviceName",
                              @"signature":@"f75cf3a2d6a55ff0429dce283e133039"
                              };
    
    [ZSNetWorking POSTRequestModel:model cancelControl:self completion:^(NSArray * _Nonnull resultArray, NSString * _Nonnull responseCode, NSString * _Nonnull responseMessage) {
        NSLog(@"responseMessage - %@",responseMessage);
        NSLog(@"resultArray - %@",resultArray);
    }];
下载

    ZSRequestModel *model = [[ZSRequestModel alloc] init];
    model.requestFullURL = @"http://cn.bing.com/az/hprichbg/rb/WindmillLighthouse_ZH-CN12870536851_1920x1080.jpg";
    [ZSNetWorking DownloadRequestModel:model progress:^(NSProgress *taskProgress) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.progressView setProgress:taskProgress.fractionCompleted animated:YES];
        });
    } completion:^(NSURLResponse *response, NSURL *filePath, NSError *error, NSData *resumeData) {
        if (filePath && !error) {
            NSLog(@"下载成功: %@",filePath.path);
            UIImage *image = [UIImage imageWithContentsOfFile:filePath.path];
            ShowImageVC *showVC = [[ShowImageVC alloc] init];
            showVC.image = image;
            [self.navigationController pushViewController:showVC animated:YES];
        }
        else if (resumeData) {
            //下载失败,有resumeData
        }
    }];

上传

更多例子请查看Demo工程

更新记录

  • 0.0.1:常用的GET、POST、文件上传/下载、网络状态监测功能;

       取消网络请求任务功能;
       
       自定义服务器协议;