PPNetworkHelper 0.8.1

PPNetworkHelper 0.8.1

测试测试通过
Lang语言 Obj-CObjective-C
许可证 MIT
Released最后发布2018年3月

jkpang 维护。



 
依赖关系
AFNetworking~> 3.2.0
YYCache~> 1.0.4
 

  • 作者
  • jkpang

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

新建 PP-iOS学习交流群:323408051 有关于PP系列封装的问题和iOS技术可以在此群讨论

简书地址 ;

image

要求

  • iOS 7+
  • Xcode 8+

安装

1.手动安装

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

使用方法

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网络");
        }
    }
    或
    if ([PPNetworkHelper isNetwork]) {
        NSLog(@"有网络");
        if ([PPNetworkHelper isWWANNetwork]) {
            NSLog(@"手机网络");
        }else if ([PPNetworkHelper isWiFiNetwork]){
            NSLog(@"WiFi网络");
        }
    }

7. 网络缓存

7.1 获取缓存总大小

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

7.2 删除所有缓存

[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;

PPNetworkHelper 全部使用类方法调用,使用简单,妈妈再也不用担心我一句一句地写 SQLite 了~~~如果您有更好的建议,希望不吝赐教!

您的 star 是我持续更新的动力!

联系方式

PP-iOS学习交流群群二维码

许可证

PPNetworkHelper 使用 MIT 许可证,详情见 LICENSE 文件。