PPNetworkHelper
現在絕大部分的APP都會對服務器端的數據進行緩存,以增強用戶體驗,不讓APP在無網狀態下顯得光禿禿的。之前在我自己的一個項目中使用的是FMDB進行的離線緩存,雖然FMDB大大簡化了SQLite語句的繁瑣,但需要緩存的東西一但多起來,用起來還是比較麻煩的。(2016/9/27更新-,無需設置,,無需插件,控制臺可直接打印中文字符,Xcode8絕配!)
無意中看到一篇ibireme的YYCache 設計思路的技術博客,就知道發現我想要的東西了,以下就是對AFNetworking 3.x 與YYCache的二次封裝,封裝常見的GET、POST、文件上傳/下載、網絡狀態監測的功能、方法接口簡潔明了,使用YYCache(緩存性能足夠優秀,詳情可戳其博客)實現對網絡數據的自動緩存,簡單易用,不用再寫FMDB那煩人的SQL語句,一句代碼搞定網絡數據的請求與緩存.
演示圖
一、PPNetworkHelper, 網絡請求部分對AFN3.x的簡單封裝
1.GET請求無緩存
/**
* GET請求,無緩存
*
* @param URL 請求地址
* @param parameters 請求參數
* @param success 請求成功的回調
* @param failure 請求失敗的回調
*
* @return 返回的對象可取消請求,調用cancle方法
*/
+ (__kindof NSURLSessionTask *)GET:(NSString *)URL parameters:(NSDictionary *)parameters success:(HttpRequestSuccess)success failure:(HttpRequestFailed)failure;
2.GET請求自動緩存
/**
* GET請求,自動緩存
*
* @param URL 請求地址
* @param parameters 請求參數
* @param responseCache 緩存數據的回調
* @param success 請求成功的回調
* @param failure 請求失敗的回調
*
* @return 返回的對象可取消請求,調用cancle方法
*/
+ (__kindof NSURLSessionTask *)GET:(NSString *)URL parameters:(NSDictionary *)parameters responseCache:(HttpRequestCache)responseCache success:(HttpRequestSuccess)success failure:(HttpRequestFailed)failure;
3.POST請求無緩存
/**
* POST請求,無緩存
*
* @param URL 請求地址
* @param parameters 請求參數
* @param success 請求成功的回調
* @param failure 請求失敗的回調
*
* @return 返回的對象可取消請求,調用cancle方法
*/
+ (__kindof NSURLSessionTask *)POST:(NSString *)URL parameters:(NSDictionary *)parameters success:(HttpRequestSuccess)success failure:(HttpRequestFailed)failure;
4.POST請求自動緩存
/**
* POST請求,自動緩存
*
* @param URL 請求地址
* @param parameters 請求參數
* @param responseCache 緩存數據的回調
* @param success 請求成功的回調
* @param failure 請求失敗的回調
*
* @return 返回的對象可取消請求,調用cancle方法
*/
+ (__kindof NSURLSessionTask *)POST:(NSString *)URL parameters:(NSDictionary *)parameters responseCache:(HttpRequestCache)responseCache success:(HttpRequestSuccess)success failure:(HttpRequestFailed)failure;
5.上傳圖片文件
/**
* 上傳圖片文件
*
* @param URL 請求地址
* @param parameters 請求參數
* @param images 圖片數組
* @param name 文件對應服務器上的字段
* @param fileName 文件名
* @param mimeType 圖片文件的類型,例:png、jpeg(默認類型)....
* @param progress 上傳進度信息
* @param success 請求成功的回調
* @param failure 請求失敗的回調
*
* @return 返回的對象可取消請求,調用cancle方法
*/
+ (__kindof NSURLSessionTask *)uploadWithURL:(NSString *)URL parameters:(NSDictionary *)parameters images:(NSArray<UIImage *> *)images name:(NSString *)name fileName:(NSString *)fileName mimeType:(NSString *)mimeType progress:(HttpProgress)progress success:(HttpRequestSuccess)success failure:(HttpRequestFailed)failure;
6.下載文件
/**
* 下載文件
*
* @param URL 請求地址
* @param fileDir 文件存儲目錄(默認存儲目錄為Download)
* @param progress 文件下載的進度信息
* @param success 下載成功的回調(回調參數filePath:文件的路徑)
* @param failure 下載失敗的回調
*
* @return 返回NSURLSessionDownloadTask實例,可用于暫停繼續,暫停調用suspend方法,開始下載調用resume方法
*/
+ (__kindof NSURLSessionTask *)downloadWithURL:(NSString *)URL fileDir:(NSString *)fileDir progress:(HttpProgress)progress success:(void(^)(NSString *filePat
+ h))success failure:(HttpRequestFailed)failure;
7.監聽網絡狀態及網絡狀態實時回調
/**
* 開始監聽網絡狀態
*/
+ (void)startMonitoringNetwork;
/**
* 通過Block回調實時獲取網絡狀態,也可以通過返回值進行一次性判斷
*/
+ (BOOL)checkNetworkStatusWithBlock:(NetworkStatus)status;
二、PPNetworkCache,數據緩存部分對YYCache簡單封裝
/**
* 緩存網絡數據
*
* @param responseCache 服務器返回的數據
* @param key 緩存數據對應的key值,推薦填入請求的URL
*/
+ (void)saveHttpCache:(id)httpCache forKey:(NSString *)key;
/**
* 取出緩存的數據
*
* @param key 根據存入時候填入的key值來取出對應的數據
*
* @return 緩存的數據
*/
+ (id)getHttpCacheForKey:(NSString *)key;
/**
* 獲取網絡緩存的總大小 bytes(字節)
*/
+ (NSInteger)getAllHttpCacheSize;
/**
* 刪除所有網絡緩存,
*/
+ (void)removeAllHttpCache;
三、請求示例
1.無緩存
[PPNetworkHelper GET:url parameters:nil success:^(id responseObject) {
//請求成功
} failure:^(NSError *error) {
//請求失敗
}];
2.自動緩存
[PPNetworkHelper GET:url parameters:nil responseCache:^(id responseCache) {
//加載緩存數據
} success:^(id responseObject) {
//請求成功
} failure:^(NSError *error) {
//請求失敗
}];