iOS AFNETWorkIng的封裝類
阿新 • • 發佈:2019-02-03
#import "HttpsManager.h"
@implementation HttpsManager
#pragma mark - 建立請求者
+(AFHTTPSessionManager *)manager
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 超時時間
manager.requestSerializer.timeoutInterval = kTimeOutInterval;
// 宣告上傳的是json格式的引數,需要你和後臺約定好,不然會出現後臺無法獲取到你上傳的引數問題
manager.requestSerializer = [AFHTTPRequestSerializer serializer]; // 上傳普通格式
// manager.requestSerializer = [AFJSONRequestSerializer serializer]; // 上傳JSON格式
// 宣告獲取到的資料格式
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // AFN不會解析,資料是data,需要自己解析
// manager.responseSerializer = [AFJSONResponseSerializer serializer]; // AFN會JSON解析返回的資料
// 個人建議還是自己解析的比較好,有時介面返回的資料不合格會報3840錯誤,大致是AFN無法解析返回來的資料
return manager;
}
+ (void)getUserCarShopAndSalesDataForSalesWithUserId:(NSString *)userId date:(NSString *)date selectAreaType:(NSString *)areaType Success:(SuccessBlock)success fail:(AFNErrorBlock)fail
{
// get請求也可以直接將引數放在字典裡,AFN會自己講引數拼接在url的後面,不需要自己憑藉
NSDictionary *param = @{@"user_id":userId, @"sale_date":date, @"accessToken":@"e9c0e60318ebd07ec2fe", @"area_type":areaType};
// 建立請求類
AFHTTPSessionManager *manager = [self manager];
[manager GET:@"http://pm.yunhan-china.com/index.php/Api_sale/sales_get" parameters:param progress:^(NSProgress * _Nonnull downloadProgress) {
// 這裡可以獲取到目前資料請求的進度
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 請求成功
if(responseObject){
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
success(dict,YES);
} else {
success(@{@"msg":@"暫無資料"}, NO);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 請求失敗
fail(error);
}];
}
+ (void)loginWithUserAccount:(NSString *)account password:(NSString *)password success:(SuccessBlock)success fail:(AFNErrorBlock)fail
{
// 將請求引數放在請求的字典裡
NSDictionary *param = @{@"phoneNumber":account, @"password":@"f379eaf3c831b04de153469d1bec345e"};
// 建立請求類
AFHTTPSessionManager *manager = [self manager];
[manager POST:@"http://pm.yunhan-china.com/index.php/api_common/login"
parameters:param
progress:^(NSProgress * _Nonnull uploadProgress) {
// 這裡可以獲取到目前資料請求的進度
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 請求成功
if(responseObject){
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
success(dict,YES);
} else {
success(@{@"msg":@"暫無資料"}, NO);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 請求失敗
fail(error);
}];
}
- (void)downLoadWithUrlString:(NSString *)urlString
{
// 1.建立管理者物件
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 2.設定請求的URL地址
NSURL *url = [NSURL URLWithString:urlString];
// 3.建立請求物件
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 4.下載任務
NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
// 下載進度
NSLog(@"當前下載進度為:%lf", 1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
// 下載地址
NSLog(@"預設下載地址%@",targetPath);
// 設定下載路徑,通過沙盒獲取快取地址,最後返回NSURL物件
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
return [NSURL fileURLWithPath:filePath]; // 返回的是檔案存放在本地沙盒的地址
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
// 下載完成呼叫的方法
NSLog(@"%@---%@", response, filePath);
}];
// 5.啟動下載任務
[task resume];
}
- (void)uploadWithUser:(NSString *)userId UrlString:(NSString *)urlString upImg:(UIImage *)upImg
{
// 建立管理者物件
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 引數
NSDictionary *param = @{@"user_id":userId};
[manager POST:urlString parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
/******** 1.上傳已經獲取到的img *******/
// 把圖片轉換成data
NSData *data = UIImagePNGRepresentation(upImg);
// 拼接資料到請求題中
[formData appendPartWithFileData:data name:@"file" fileName:@"123.png" mimeType:@"image/png"];
/******** 2.通過路徑上傳沙盒或系統相簿裡的圖片 *****/
// [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"檔案地址"] name:@"file" fileName:@"1234.png" mimeType:@"application/octet-stream" error:nil];
} progress:^(NSProgress * _Nonnull uploadProgress) {
// 列印上傳進度
NSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//請求成功
NSLog(@"請求成功:%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//請求失敗
NSLog(@"請求失敗:%@",error);
}];
}
- (void)AFNetworkStatus{
//1.建立網路監測者
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
/*列舉裡面四個狀態 分別對應 未知 無網路 資料 WiFi
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
AFNetworkReachabilityStatusUnknown = -1, 未知
AFNetworkReachabilityStatusNotReachable = 0, 無網路
AFNetworkReachabilityStatusReachableViaWWAN = 1, 蜂窩資料網路
AFNetworkReachabilityStatusReachableViaWiFi = 2, WiFi
};
*/
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
//這裡是監測到網路改變的block 可以寫成switch方便
//在裡面可以隨便寫事件
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"未知網路狀態");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"無網路");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"蜂窩資料網");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WiFi網路");
break;
default:
break;
}
}] ;
}
@end