美文网首页
iOS PPNetworkHelper使用

iOS PPNetworkHelper使用

作者: Zhen斌iOS | 来源:发表于2020-06-02 22:51 被阅读0次

    https://github.com/jkpang/PPNetworkHelper

    一、介绍

    对AFNetworking 3.x 与YYCache的二次封装,封装常见的GET、POST、文件上传/下载、网络状态监测的功能、方法接口简洁明了,并结合YYCache实现对网络数据的缓存,简单易用,不用再写FMDB那烦人的SQL语句,一句代码搞定网络数据的请求与缓存. 无需设置,无需插件,控制台可直接打印json中文字符,调试更方便

    二、要求与安装

    1、要求
    iOS 7+
    Xcode 8+
    
    2、手动安装

    下载DEMO后,将子文件夹PPNetworkHelper拖入到项目中, 导入头文件PPNetworkHelper.h开始使用, 注意: 项目中需要有AFN3.x , YYCache第三方库! 在工程中链接sqlite3依赖库

    3、CocoaPods安装:
    first 
    pod 'PPNetworkHelper',:git => 'https://github.com/jkpang/PPNetworkHelper.git' 
    then 
    pod install或pod install --no-repo-update
    

    如果发现pod search PPNetworkHelper 不是最新版本,在终端执行pod setup命令更新本地spec镜像缓存(时间可能有点长),重新搜索就OK了

    三、使用方法

    1、无自动缓存(GET与POST请求用法相同)

    1.1 无缓存

    [PPNetworkHelper GET:url parameters:nil success:^(id responseObject) {
            //请求成功
        } failure:^(NSError *error) {
            //请求失败
    }];
    

    1.2 无缓存,手动缓存

    [PPNetworkHelper GET:url parameters:nil success:^(id responseObject) {
        //请求成功
            //手动缓存
        [PPNetworkCache setHttpCache:responseObject URL:url parameters:parameters];
        } failure:^(NSError *error) {
        //请求失败
    }];
    
    2. 自动缓存(GET与POST请求用法相同)
    [PPNetworkHelper GET:url parameters:nil responseCache:^(id responseCache) {
            //加载缓存数据
        } success:^(id responseObject) {
            //请求成功
        } failure:^(NSError *error) {
            //请求失败
    }];
    
    3.单/多图片上传
    [PPNetworkHelper uploadImagesWithURL:url
                            parameters:@{@"参数":@"参数"}
                                images:@[@"UIImage数组"]
                              name:@"文件对应服务器上的字段"
                          fileNames:@"文件名称数组"
                          imageType:@"图片的类型,png,jpeg" 
                          imageScale:@"图片文件压缩比 范围 (0.f ~ 1.f)"
                          progress:^(NSProgress *progress) {
                              //上传进度
                              NSLog(@"上传进度:%.2f%%",100.0 * progress.completedUnitCount/progress.totalUnitCount);
                          } success:^(id responseObject) {
                             //上传成功
                          } failure:^(NSError *error) {
                            //上传失败
    }];
    
    4.文件上传
    [PPNetworkHelper uploadFileWithURL:url
                        parameters:@{@"参数":@"参数"}
                              name:@"文件对应服务器上的字段"
                          filePath:@"文件本地的沙盒路径"
                          progress:^(NSProgress *progress) {
                              //上传进度
                              NSLog(@"上传进度:%.2f%%",100.0 * progress.completedUnitCount/progress.totalUnitCount);
                          } success:^(id responseObject) {
                             //上传成功
                          } failure:^(NSError *error) {
                            //上传失败
    }];
    
    5.文件下载
    NSURLSessionTask *task = [PPNetworkHelper downloadWithURL:url fileDir:@"下载至沙盒中的制定文件夹(默认为Download)" progress:^(NSProgress *progress) {
            //下载进度,如果要配合UI进度条显示,必须在主线程更新UI
            NSLog(@"下载进度:%.2f%%",100.0 * progress.completedUnitCount/progress.totalUnitCount);
        } success:^(NSString *filePath) {
            //下载成功
        } failure:^(NSError *error) {
            //下载失败
    }];
        
    //暂停下载,暂不支持断点下载
    [task suspend];
    //开始下载
    [task resume];
    
    6.网络状态监测
    // 1.实时获取网络状态,通过Block回调实时获取(此方法可多次调用)
    [PPNetworkHelper networkStatusWithBlock:^(PPNetworkStatus status) {
       switch (status) {
           case PPNetworkStatusUnknown:          //未知网络
               break;
           case PPNetworkStatusNotReachable:    //无网络
               break;
           case PPNetworkStatusReachableViaWWAN://手机网络
               break;
           case PPNetworkStatusReachableViaWiFi://WIFI
               break;
       }
    }];
        
    // 2.一次性获取当前网络状态
    if (kIsNetwork) {          
       NSLog(@"有网络");
       if (kIsWWANNetwork) {                    
           NSLog(@"手机网络");
       }else if (kIsWiFiNetwork){
           NSLog(@"WiFi网络");
       }
    } else {
       NSLog(@"无网络");
    }
    
    7. 网络缓存

    7.1 自动缓存的逻辑

    1.从本地获取缓存(不管有无数据) --> 
    2.请求服务器数据 --> 
    3.更新本地数据
    

    7.2 获取缓存总大小

    NSInteger totalBytes = [PPNetworkCache getAllHttpCacheSize];
    NSLog(@"网络缓存大小cache = %.2fMB",totalBytes/1024/1024.f);
    

    7.3 删除所有缓存

    [PPNetworkCache removeAllHttpCache];
    
    8.网络参数设置(附说明)
    /*
     **************************************  说明  **********************************************
     *
     * 在一开始设计接口的时候就想着方法接口越少越好,越简单越好,只有GET,POST,上传,下载,监测网络状态就够了.
     *
     * 无奈的是在实际开发中,每个APP与后台服务器的数据交互都有不同的请求格式,如果要修改请求格式,就要在此封装
     * 内修改,再加上此封装在支持CocoaPods后,如果使用者pod update最新PPNetworkHelper,那又要重新修改此
     * 封装内的相关参数.
     *
     * 依个人经验,在项目的开发中,一般都会将网络请求部分封装 2~3 层,第2层配置好网络请求工具的在本项目中的各项
     * 参数,其暴露出的方法接口只需留出请求URL与参数的入口就行,第3层就是对整个项目请求API的封装,其对外暴露出的
     * 的方法接口只留出请求参数的入口.这样如果以后项目要更换网络请求库或者修改请求URL,在单个文件内完成配置就好
     * 了,大大降低了项目的后期维护难度
     *
     * 综上所述,最终还是将设置参数的接口暴露出来,如果通过CocoaPods方式使用PPNetworkHelper,在设置项目网络
     * 请求参数的时候,强烈建议开发者在此基础上再封装一层,通过以下方法配置好各种参数与请求的URL,便于维护
     *
     **************************************  说明  **********************************************
     */
    
    #pragma mark - 重置AFHTTPSessionManager相关属性
    /**
     *  设置网络请求参数的格式:默认为二进制格式
     *
     *  @param requestSerializer PPRequestSerializerJSON(JSON格式),PPRequestSerializerHTTP(二进制格式),
     */
    + (void)setRequestSerializer:(PPRequestSerializer)requestSerializer;
    
    /**
     *  设置服务器响应数据格式:默认为JSON格式
     *
     *  @param responseSerializer PPResponseSerializerJSON(JSON格式),PPResponseSerializerHTTP(二进制格式)
     */
    + (void)setResponseSerializer:(PPResponseSerializer)responseSerializer;
    
    /**
     *  设置请求超时时间:默认为30S
     *
     *  @param time 时长
     */
    + (void)setRequestTimeoutInterval:(NSTimeInterval)time;
    
    /**
     *  设置请求头
     */
    + (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
    
    /**
     *  是否打开网络状态转圈菊花:默认打开
     *
     *  @param open YES(打开), NO(关闭)
     */
    + (void)openNetworkActivityIndicator:(BOOL)open;
    
    /**
     配置自建证书的Https请求, 参考链接: http://blog.csdn.net/syg90178aw/article/details/52839103
    
     @param cerPath 自建Https证书的路径
     @param validatesDomainName 是否需要验证域名,默认为YES. 如果证书的域名与请求的域名不一致,需设置为NO; 即服务器使用其他可信任机构颁发
            的证书,也可以建立连接,这个非常危险, 建议打开.validatesDomainName=NO, 主要用于这种情况:客户端请求的是子域名, 而证书上的是另外
            一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com, 那么mail.google.com是无法验证通过的.
     */
    + (void)setSecurityPolicyWithCerPath:(NSString *)cerPath validatesDomainName:(BOOL)validatesDomainName;
    

    相关文章

      网友评论

          本文标题:iOS PPNetworkHelper使用

          本文链接:https://www.haomeiwen.com/subject/mukmzhtx.html