AFN3.0集成與二次封裝(手動(dòng)集成)

摘要

隨著蘋果https的出現(xiàn),在網(wǎng)絡(luò)請(qǐng)求方面蘋果已經(jīng)拋棄了NSURLConnection鸳劳,而是采用了使用更為簡(jiǎn)單的NSURLSession,最近正在搭一個(gè)程序框架狰贯,最后還是選擇了AFN3.0,并通過朋友demo的參考,進(jìn)行了二次封裝涵紊,集成方法如下:

準(zhǔn)備階段

1.首先下載最新版本的AFN3.0傍妒,網(wǎng)址如下:https://github.com/AFNetworking/AFNetworking
2.新建一個(gè)工程:名字隨意

集成階段

1.打開下載下來的demo,運(yùn)行如下(其中紅色箭頭所指的文件是我們拖到項(xiàng)目中的兩個(gè)文件):


1678515-d4b859838f96a269.jpg

2.將拖到新建的項(xiàng)目中,在info.plist文件中添加ATS(App Transporty security……)摸柄,command+B編譯一下颤练,發(fā)現(xiàn)沒有問題即可。ATS截圖如下:


1678515-491d06a5ac337984.jpg

到目前來說驱负,AFN3.0已經(jīng)集成完畢嗦玖,但是有些細(xì)心的朋友會(huì)發(fā)現(xiàn),AFN3.0的工程中出現(xiàn)了好多SSL證書跃脊,如圖所示:

1678515-8c1a0bd2a9d03cfe.jpg

這種情況下:自己也爬網(wǎng)查了一些東西宇挫,提供兩個(gè)網(wǎng)址以供參考:
http://www.cnblogs.com/jys509/p/5001566.html
http://oncenote.com/2014/10/21/Security-1-HTTPS/
講的很專業(yè),希望對(duì)讀到的朋友有幫助酪术!

二次封裝

主要是新建了一個(gè)NSObject的子類器瘪,對(duì)AFN的功能進(jìn)行了集成:
LHAFNetWork.h
#import <Foundation/Foundation.h>
#import "AFNetworking/AFNetworking.h"

/**
 *  宏定義請(qǐng)求成功的block
 *
 *  @param response 請(qǐng)求成功返回的數(shù)據(jù)
 */
typedef void (^LHResponseSuccess)(NSURLSessionDataTask * task,id responseObject);

/**
 *  宏定義請(qǐng)求失敗的block
 *
 *  @param error 報(bào)錯(cuò)信息
 */
typedef void (^LHResponseFail)(NSURLSessionDataTask * task, NSError * error);

/**
 *  上傳或者下載的進(jìn)度
 *
 *  @param progress 進(jìn)度
 */
 typedef void (^LHProgress)(NSProgress *progress);

@interface LHAFNetWork : NSObject
/**
 *  普通get方法請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù)
 *
 *  @param url     請(qǐng)求網(wǎng)址路徑
 *  @param params  請(qǐng)求參數(shù)
 *  @param success 成功回調(diào)
 *  @param fail    失敗回調(diào)
 */
+(void)GET:(NSString *)url
params:(NSDictionary *)params success:(LHResponseSuccess)success
  fail:(LHResponseFail)fail;
/**
 *  含有baseURL的get方法
 *
 *  @param url     請(qǐng)求網(wǎng)址路徑
 *  @param baseUrl 請(qǐng)求網(wǎng)址根路徑
 *  @param params  請(qǐng)求參數(shù)
 *  @param success 成功回調(diào)
 *  @param fail    失敗回調(diào)
 */
+(void)GET:(NSString *)url baseURL:(NSString *)baseUrl
params:(NSDictionary *)params success:(LHResponseSuccess)success fail:(LHResponseFail)fail;

/**
 *  普通post方法請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù)
 *
 *  @param url     請(qǐng)求網(wǎng)址路徑
 *  @param params  請(qǐng)求參數(shù)
 *  @param success 成功回調(diào)
 *  @param fail    失敗回調(diào)
 */
  +(void)POST:(NSString *)url
 params:(NSDictionary *)params
success:(LHResponseSuccess)success
   fail:(LHResponseFail)fail;

/**
 *  含有baseURL的post方法
 *
 *  @param url     請(qǐng)求網(wǎng)址路徑
 *  @param baseUrl 請(qǐng)求網(wǎng)址根路徑
 *  @param params  請(qǐng)求參數(shù)
 *  @param success 成功回調(diào)
 *  @param fail    失敗回調(diào)
 */
+(void)POST:(NSString *)url
baseURL:(NSString *)baseUrl
 params:(NSDictionary *)params
success:(LHResponseSuccess)success
   fail:(LHResponseFail)fail;

/**
 *  普通路徑上傳文件
 *
 *  @param url      請(qǐng)求網(wǎng)址路徑
 *  @param params   請(qǐng)求參數(shù)
 *  @param filedata 文件
 *  @param name     指定參數(shù)名
 *  @param filename 文件名(要有后綴名)
 *  @param mimeType 文件類型
 *  @param progress 上傳進(jìn)度
 *  @param success  成功回調(diào)
 *  @param fail     失敗回調(diào)
 */
+(void)uploadWithURL:(NSString *)url
          params:(NSDictionary *)params
        fileData:(NSData *)filedata
            name:(NSString *)name
        fileName:(NSString *)filename
        mimeType:(NSString *) mimeType
        progress:(LHProgress)progress
         success:(LHResponseSuccess)success
            fail:(LHResponseFail)fail;
/**
 *  含有跟路徑的上傳文件
 *
 *  @param url      請(qǐng)求網(wǎng)址路徑
 *  @param baseurl  請(qǐng)求網(wǎng)址根路徑
 *  @param params   請(qǐng)求參數(shù)
 *  @param filedata 文件
 *  @param name     指定參數(shù)名
 *  @param filename 文件名(要有后綴名)
 *  @param mimeType 文件類型
 *  @param progress 上傳進(jìn)度
 *  @param success  成功回調(diào)
 *  @param fail     失敗回調(diào)
 */
 +(void)uploadWithURL:(NSString *)url
         baseURL:(NSString *)baseurl
          params:(NSDictionary *)params
        fileData:(NSData *)filedata
            name:(NSString *)name
        fileName:(NSString *)filename
        mimeType:(NSString *) mimeType
        progress:(LHProgress)progress
         success:(LHResponseSuccess)success
            fail:(LHResponseFail)fail;

/**
 *  下載文件
 *
 *  @param url      請(qǐng)求網(wǎng)絡(luò)路徑
 *  @param fileURL  保存文件url
 *  @param progress 下載進(jìn)度
 *  @param success  成功回調(diào)
 *  @param fail     失敗回調(diào)
 *
 *  @return 返回NSURLSessionDownloadTask實(shí)例,可用于暫停繼續(xù)拼缝,暫停調(diào)用suspend方法娱局,重新開啟下載調(diào)用resume方法
 */
+(NSURLSessionDownloadTask *)downloadWithURL:(NSString *)url
                             savePathURL:(NSURL *)fileURL
                                progress:(LHProgress )progress
                                 success:(void (^)(NSURLResponse *, NSURL *))success
                                    fail:(void (^)(NSError *))fail;
@end

LHAFNetWork.m
#import "LHAFNetWork.h"
@implementation LHAFNetWork
+(void)GET:(NSString *)url params:(NSDictionary *)params
success:(LHResponseSuccess)success fail:(LHResponseFail)fail{

AFHTTPSessionManager *manager = [LHAFNetWork managerWithBaseURL:nil sessionConfiguration:NO];
[manager GET:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
    id dic = [LHAFNetWork responseConfiguration:responseObject];
    
    success(task,dic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    fail(task,error);
}];
}

+(void)GET:(NSString *)url baseURL:(NSString *)baseUrl params:(NSDictionary *)params
 success:(LHResponseSuccess)success fail:(LHResponseFail)fail{

AFHTTPSessionManager *manager = [LHAFNetWork managerWithBaseURL:baseUrl sessionConfiguration:NO];
[manager GET:url parameters:params progress:^(NSProgress * _Nonnull downloadProgress) {
    
} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
    
    id dic = [LHAFNetWork responseConfiguration:responseObject];
    
    success(task,dic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    fail(task,error);
}];

}

+(void)POST:(NSString *)url params:(NSDictionary *)params
success:(LHResponseSuccess)success fail:(LHResponseFail)fail{

AFHTTPSessionManager *manager = [LHAFNetWork managerWithBaseURL:nil sessionConfiguration:NO];

[manager POST:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
    id dic = [LHAFNetWork responseConfiguration:responseObject];
    
    success(task,dic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    fail(task,error);
}];
}

+(void)POST:(NSString *)url baseURL:(NSString *)baseUrl params:(NSDictionary *)params
success:(LHResponseSuccess)success fail:(LHResponseFail)fail{

AFHTTPSessionManager *manager = [LHAFNetWork managerWithBaseURL:baseUrl sessionConfiguration:NO];
[manager POST:url parameters:params progress:^(NSProgress * _Nonnull uploadProgress) {
    
} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
    id dic = [LHAFNetWork responseConfiguration:responseObject];
    
    success(task,dic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    fail(task,error);
}];
}

+(void)uploadWithURL:(NSString *)url params:(NSDictionary *)params fileData:(NSData *)filedata name:(NSString *)name fileName:(NSString *)filename mimeType:(NSString *) mimeType progress:(LHProgress)progress success:(LHResponseSuccess)success fail:(LHResponseFail)fail{

AFHTTPSessionManager *manager = [LHAFNetWork managerWithBaseURL:nil sessionConfiguration:NO];

[manager POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
    
    [formData appendPartWithFileData:filedata name:name fileName:filename mimeType:mimeType];
    
} progress:^(NSProgress * _Nonnull uploadProgress) {
    
    progress(uploadProgress);
    
} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
    id dic = [LHAFNetWork responseConfiguration:responseObject];
    success(task,dic);
    
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    fail(task,error);
}];
}

+(void)uploadWithURL:(NSString *)url
         baseURL:(NSString *)baseurl
          params:(NSDictionary *)params
        fileData:(NSData *)filedata
            name:(NSString *)name
        fileName:(NSString *)filename
        mimeType:(NSString *) mimeType
        progress:(LHProgress)progress
         success:(LHResponseSuccess)success
            fail:(LHResponseFail)fail{

AFHTTPSessionManager *manager = [LHAFNetWork managerWithBaseURL:baseurl sessionConfiguration:YES];

[manager POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
    [formData appendPartWithFileData:filedata name:name fileName:filename mimeType:mimeType];
} progress:^(NSProgress * _Nonnull uploadProgress) {
    progress(uploadProgress);
} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
    id dic = [LHAFNetWork responseConfiguration:responseObject];
    
    success(task,dic);
    
    
    success(task,responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    fail(task,error);
}];
}

+(NSURLSessionDownloadTask *)downloadWithURL:(NSString *)url
                             savePathURL:(NSURL *)fileURL
                                progress:(LHProgress )progress
                                 success:(void (^)(NSURLResponse *, NSURL *))success
                                    fail:(void (^)(NSError *))fail{
AFHTTPSessionManager *manager = [self managerWithBaseURL:nil sessionConfiguration:YES];

NSURL *urlpath = [NSURL URLWithString:url];
NSURLRequest *request = [NSURLRequest requestWithURL:urlpath];

NSURLSessionDownloadTask *downloadtask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
    progress(downloadProgress);
    
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
    
    return [fileURL URLByAppendingPathComponent:[response suggestedFilename]];
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
    
    if (error) {
        fail(error);
    }else{
        
        success(response,filePath);
    }
}];

[downloadtask resume];

return downloadtask;
}

#pragma mark - Private

+(AFHTTPSessionManager *)managerWithBaseURL:(NSString *)baseURL  sessionConfiguration:(BOOL)isconfiguration{

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFHTTPSessionManager *manager =nil;

NSURL *url = [NSURL URLWithString:baseURL];

if (isconfiguration) {
    
    manager = [[AFHTTPSessionManager alloc] initWithBaseURL:url sessionConfiguration:configuration];
}else{
    manager = [[AFHTTPSessionManager alloc] initWithBaseURL:url];
}

manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

return manager;
}

+(id)responseConfiguration:(id)responseObject{

NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""];
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
return dic;
}
@end

到此為止本人的第一篇博客已經(jīng)寫完,后續(xù)還會(huì)有更多高含量的博客發(fā)表……
轉(zhuǎn)載:http://www.reibang.com/p/986f51578e96

歡迎關(guān)注我的個(gè)人微信公眾號(hào)咧七,免費(fèi)送計(jì)算機(jī)各種最新視頻資源衰齐!你想象不到的精彩!


0.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末继阻,一起剝皮案震驚了整個(gè)濱河市耻涛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瘟檩,老刑警劉巖抹缕,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異墨辛,居然都是意外死亡卓研,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門睹簇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奏赘,“玉大人,你說我怎么就攤上這事太惠∧ヌ剩” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵梁只,是天一觀的道長(zhǎng)缚柳。 經(jīng)常有香客問我搪锣,道長(zhǎng),這世上最難降的妖魔是什么构舟? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任翰绊,我火速辦了婚禮,結(jié)果婚禮上旁壮,老公的妹妹穿的比我還像新娘谐檀。我一直安慰自己,他們只是感情好桐猬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布麦撵。 她就那樣靜靜地躺著,像睡著了一般溃肪。 火紅的嫁衣襯著肌膚如雪免胃。 梳的紋絲不亂的頭發(fā)上惫撰,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音扼雏,去河邊找鬼。 笑死诗充,一個(gè)胖子當(dāng)著我的面吹牛诱建,可吹牛的內(nèi)容都是我干的蝴蜓。 我是一名探鬼主播俺猿,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼汽抚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起造烁,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惭蟋,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體煤伟,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡木缝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了放案。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吱殉,死狀恐怖厘托,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铅匹,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布考杉,位于F島的核電站,受9級(jí)特大地震影響舰始,放射性物質(zhì)發(fā)生泄漏崇棠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一枕稀、第九天 我趴在偏房一處隱蔽的房頂上張望谜嫉。 院中可真熱鬧,春花似錦沐兰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽楚堤。三九已至脆霎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胶果,已是汗流浹背暂刘。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國打工嫩海, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留囚痴,地道東北人出革。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓渡讼,卻偏偏與公主長(zhǎng)得像耳璧,于是被迫代替她去往敵國和親成箫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蹬昌,服務(wù)發(fā)現(xiàn)攀隔,斷路器皂贩,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • 很可能你的應(yīng)用是與一個(gè)支持HTTPS傳輸數(shù)據(jù)的服務(wù)器交互昆汹,但是并沒有使用TLS 1.2或更高明刷。在這種情況下满粗,你定義...
    Www劉閱讀 3,064評(píng)論 0 5
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,747評(píng)論 25 707
  • 為了自己
    yuky閱讀 170評(píng)論 0 0
  • 不知怎的,用了半年多的用戶名映皆,突然想換一個(gè) so: 修改了/etc/passwd 和/etc/shadow 文件里...
    海狩閱讀 1,253評(píng)論 0 2