AFNetworkingネットワークフレームの基本使用
13617 ワード
AFM
一、何がAFMですか
全称はAFNetworkingで、NSURLConnectに対するパッケージです。
運行効率はASIほど高くないですが、ASIよりも使いやすいです。
iOS開発では、広く使用されています。
二、AFM構造
NSURLConnection
AFRURLConnection Operation
AHTTPRequest Operation
AHTTPRequest OperationManager(一般的なHTTPを封入した方法)
属性
baseURL:AFNは、AHTTPrequest OperationManagerに対して、一例クラスをカスタマイズし、baseURLを設定し、すべてのネットワークアクセスは、相対パスだけでいいです。
request Serializer:要求データフォーマット/デフォルトはバイナリのHTTP
レスポンスデータフォーマット/デフォルトはJSON形式です。
operation Que
reachability Manager:ネットワーク接続マネージャ
方法
マネージャーのクラスを作成するのに便利な方法
HTTPRequest Operation WithRequest:サーバにアクセスする時、サーバーにいくつかの追加情報を教えるなら、すべてRequestに設定する必要があります。
GET
POST
NSURLSession
AFRURLSessionManager
AHTTPSession Manager(一般的なHTTPを封入した方法)
GET
POST
UIKEt+AFNetworking分類
NSProgress:KVOを利用する
半自動のプログレッシブ&アンチプログレッシブ機能
AFRURL Request Serialization:要求されたデータフォーマット/デフォルトはバイナリです。
AFRURL ResonseSerialization:レスポンスデータフォーマット/デフォルトはJSON形式です。
付加機能
セキュリティポリシー
HTTPS
AFSecurityPolicy
ネットワーク検出
アップルのネットワーク接続検査をパッケージ化しました。
AFNetwork Reachability Manager
三、AFMは基本的に使用します。
1.AHTTPSession Manager
AFMの中で最も重要なオブジェクトの一つです。
HTTP要求を実装した一般的な処理
GET\POSTリクエスト
解析サーバの応答データ
AHTTPSession Managerを作成します。
AHTTPSession Manager*mgr=[AHTTPSession Manager manager manager]
AHTTPSession ManagerのGET\POST要請
//GET要求
/*
http://120.25.226.186:32812/login?username=520it&pwd=520it
最初のパラメータ:要求されたアドレス http://120.25.226.186:32812/login
二つ目のパラメータ:要求のパラメータ username=520 it&pwd=520 it
3番目のパラメータ:成功のコールバックを要求します。
4番目のパラメータ:要求失敗のコールバック
AFMを利用して要求を送信すると、サーバーがJSONデータを返したら、AFMは自動的にJSONをOCオブジェクトに移籍して返してくれます。
*/
-(NSURLSessitionDataTask*)GET:(NSString*)URLString
parameters:(id)parameters
success:(void(^^)(NSURLSessitionDataTask*task,idesレスポンスObject)success
failure:(void(^^)(NSURLSessitionDataTask*task,NSError*error)failure
//POSTリクエスト
-(NSURLSessitionDataTask*)POST:(NSString*)URLString
parameters:(id)parameters
success:(void(^^)(NSURLSessitionDataTask*task,idesレスポンスObject)success
failure:(void(^^)(NSURLSessitionDataTask*task,NSError*error)failure
コードの例:
デフォルトはJSONデータ、受信タイプはJSONです。
受信のタイプと戻るタイプが一致しないとエラーが発生します。
1.AFMモニタネットワーク状態
ネットワーク状態status
一、何がAFMですか
全称はAFNetworkingで、NSURLConnectに対するパッケージです。
運行効率はASIほど高くないですが、ASIよりも使いやすいです。
iOS開発では、広く使用されています。
二、AFM構造
NSURLConnection
AFRURLConnection Operation
AHTTPRequest Operation
AHTTPRequest OperationManager(一般的なHTTPを封入した方法)
属性
baseURL:AFNは、AHTTPrequest OperationManagerに対して、一例クラスをカスタマイズし、baseURLを設定し、すべてのネットワークアクセスは、相対パスだけでいいです。
request Serializer:要求データフォーマット/デフォルトはバイナリのHTTP
レスポンスデータフォーマット/デフォルトはJSON形式です。
operation Que
reachability Manager:ネットワーク接続マネージャ
方法
マネージャーのクラスを作成するのに便利な方法
HTTPRequest Operation WithRequest:サーバにアクセスする時、サーバーにいくつかの追加情報を教えるなら、すべてRequestに設定する必要があります。
GET
POST
NSURLSession
AFRURLSessionManager
AHTTPSession Manager(一般的なHTTPを封入した方法)
GET
POST
UIKEt+AFNetworking分類
NSProgress:KVOを利用する
半自動のプログレッシブ&アンチプログレッシブ機能
AFRURL Request Serialization:要求されたデータフォーマット/デフォルトはバイナリです。
AFRURL ResonseSerialization:レスポンスデータフォーマット/デフォルトはJSON形式です。
付加機能
セキュリティポリシー
HTTPS
AFSecurityPolicy
ネットワーク検出
アップルのネットワーク接続検査をパッケージ化しました。
AFNetwork Reachability Manager
三、AFMは基本的に使用します。
1.AHTTPSession Manager
AFMの中で最も重要なオブジェクトの一つです。
HTTP要求を実装した一般的な処理
GET\POSTリクエスト
解析サーバの応答データ
AHTTPSession Managerを作成します。
AHTTPSession Manager*mgr=[AHTTPSession Manager manager manager]
AHTTPSession ManagerのGET\POST要請
//GET要求
/*
http://120.25.226.186:32812/login?username=520it&pwd=520it
最初のパラメータ:要求されたアドレス http://120.25.226.186:32812/login
二つ目のパラメータ:要求のパラメータ username=520 it&pwd=520 it
3番目のパラメータ:成功のコールバックを要求します。
4番目のパラメータ:要求失敗のコールバック
AFMを利用して要求を送信すると、サーバーがJSONデータを返したら、AFMは自動的にJSONをOCオブジェクトに移籍して返してくれます。
*/
-(NSURLSessitionDataTask*)GET:(NSString*)URLString
parameters:(id)parameters
success:(void(^^)(NSURLSessitionDataTask*task,idesレスポンスObject)success
failure:(void(^^)(NSURLSessitionDataTask*task,NSError*error)failure
//POSTリクエスト
-(NSURLSessitionDataTask*)POST:(NSString*)URLString
parameters:(id)parameters
success:(void(^^)(NSURLSessitionDataTask*task,idesレスポンスObject)success
failure:(void(^^)(NSURLSessitionDataTask*task,NSError*error)failure
コードの例:
// GET
- (void)get2
{
// 1. AFN
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 2. AFN
NSDictionary *params = @{
@"username" : @"520it",
@"pwd" : @"520it"
};
[manager GET:@"http://120.25.226.186:32812/login" parameters:params success:^
(NSURLSessionDataTask *task, id responseObject) {
NSLog(@" ---%@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@" ---%@", error);
}];
}
// POST
- (void)post2
{
// 1. AFN
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 2. AFN
NSDictionary *params = @{
@"username" : @"520it",
@"pwd" : @"520it"
};
[manager POST:@"http://120.25.226.186:32812/login" parameters:params success:^
(NSURLSessionDataTask *task, id responseObject) {
NSLog(@" ---%@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@" ---%@", error);
}];
}
2.AHTTPRequest OperationManager AFHTTPRequestOperationManager
// 1. AFN
// AFHTTPRequestOperationManager NSURLConnection
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFHTTPRequestOperationManager GET\POST
// GET
- (NSURLSessionDataTask *)GET:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
// POST
- (NSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
コードの例:- (void)get
{
// 1. AFN
// AFHTTPRequestOperationManager NSURLConnection
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
// 2. AFN
NSDictionary *params = @{
@"username" : @"520it",
@"pwd" : @"520it"
};
[manager GET:@"http://120.25.226.186:32812/login" parameters:params success:^
(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@" ---%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@" ---%@", error);
}];
}
- (void)post
{
// 1. AFN
// AFHTTPRequestOperationManager NSURLConnection
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
// 2. AFN
NSDictionary *params = @{
@"username" : @"520it",
@"pwd" : @"520it"
};
[manager POST:@"http://120.25.226.186:32812/login" parameters:params success:^
(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@" ---%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@" ---%@", error);
}];
}
四、AFMファイルのダウンロード// ,
- (void)downLoadMonitor
{
// 1.
// AFHTTPSessionManager NSURLSession
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 2.
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@
"http://120.25.226.186:32812/resources/videos/minion_02.mp4"]];
/*
destination
- targetPath:
- block , URL, URL
completionHandler
- url :destination URL == block
*/
/*
@property int64_t totalUnitCount;
@property int64_t completedUnitCount;
*/
NSProgress *progress = nil;
NSURLSessionDownloadTask *downTask = [manager downloadTaskWithRequest:request
progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask, YES) lastObject];
NSString *path = [cachesPath stringByAppendingPathComponent:response.suggestedFilename];
return [NSURL fileURLWithPath:path];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
NSLog(@"%@",filePath.absoluteString);
}];
/*
, NSProgress, iOS 7.0 , !
NSProgress ! !-> KVO !
@property int64_t totalUnitCount;
@property int64_t completedUnitCount;
*/
// Progress KVO
[progress addObserver:self forKeyPath:@"completedUnitCount"
options:NSKeyValueObservingOptionNew context:nil];
// 3.
[downTask resume];
}
//
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(NSProgress *)object
change:(NSDictionary *)change context:(void *)context
{
NSLog(@"%f",1.0 * object.completedUnitCount / object.totalUnitCount);
// UI
dispatch_async(dispatch_get_main_queue(), ^{
self.progress.progress = 1.0 * object.completedUnitCount / object.totalUnitCount;
});
}
五、AFMプロローグデフォルトはJSONデータ、受信タイプはJSONです。
受信のタイプと戻るタイプが一致しないとエラーが発生します。
// 1. AFN
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//
// JSON
// AFN, text/xml
// [AFJSONResponseSerializer serializer].acceptableContentTypes = [NSSet
setWithObject:@"text/xml"];
// AFN
// AFN , JSON , JSON
// manager.responseSerializer = [AFJSONResponseSerializer serializer];
// AFN , XML
// manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
// AFN , ( )
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
六、AFMファイルアップロード// formData:
- (NSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(id)parameters
constructingBodyWithBlock:(void (^)(id formData))block
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
AFMアップロードファイルコード例:// 1.
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 2.
NSDictionary *dict = @{@"username":@"Syl"};
// formData:
[manager POST:@"http://120.25.226.186:32812/upload" parameters:dict
constructingBodyWithBlock:
^void(id formData) {
/*
Data:
name:
fileName:
mimeType:
*/
UIImage *image =[UIImage imageNamed:@"minion_02"];
NSData *data = UIImagePNGRepresentation(image);
[formData appendPartWithFileData:data name:@"file" fileName:@"abc.png"
mimeType:@"image/png"];
/*
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/
CertificateSigningRequest.certSigningRequest"];
// MIMEType application/octet-stream
// [formData appendPartWithFileURL:url name:@"file" fileName:@"abc.cer"
mimeType:@"application/octet-stream" error:nil];
[formData appendPartWithFileURL:url name:@"file" error:nil];
*/
} success:^void(NSURLSessionDataTask * task, id responseObject) {
//
NSLog(@" %@", responseObject);
} failure:^void(NSURLSessionDataTask * task, NSError * error) {
//
NSLog(@" %@", error);
}];
七、ネットワーク状態を監視する1.AFMモニタネットワーク状態
ネットワーク状態status
// 2.
/*
AFNetworkReachabilityStatusUnknown = -1,
AFNetworkReachabilityStatusNotReachable = 0,
AFNetworkReachabilityStatusReachableViaWWAN = 1, 3G
AFNetworkReachabilityStatusReachableViaWiFi = 2, wifi
*/
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
// : , startMonitoring
[manager startMonitoring];
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"%d", status);
}];
2
.Reachability ,
// 1. wifi
Reachability *wifi = [Reachability reachabilityForLocalWiFi];
// 2. (WIFI\3G\2.5G)
Reachability *conn = [Reachability reachabilityForInternetConnection];
// 3.
if ([wifi currentReachabilityStatus] != NotReachable) { // wifi
NSLog(@" wifi");
} else if ([conn currentReachabilityStatus] != NotReachable) {
// wifi,
NSLog(@" ");
} else { //
NSLog(@" ");
}
①
// WIFI
// [wifi currentReachabilityStatus] != NotReachable
// [conn currentReachabilityStatus] != NotReachable
// WIFI,
// [wifi currentReachabilityStatus] == NotReachable
// [conn currentReachabilityStatus] != NotReachable
//
// [wifi currentReachabilityStatus] == NotReachable
// [conn currentReachabilityStatus] == NotReachable
②
#import "ViewController.h"
#import "Reachability.h"
@interface HMViewController ()
@property (nonatomic, strong) Reachability *conn;
@end
@implementation HMViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkState)
name:kReachabilityChangedNotification object:nil];
self.conn = [Reachability reachabilityForInternetConnection];
[self.conn startNotifier];
}
- (void)dealloc
{
[self.conn stopNotifier];
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)checkNetworkState
{
// 1. wifi
Reachability *wifi = [Reachability reachabilityForLocalWiFi];
// 2. (WIFI\3G\2.5G)
Reachability *conn = [Reachability reachabilityForInternetConnection];
// 3.
if ([wifi currentReachabilityStatus] != NotReachable) { // wifi
NSLog(@" wifi");
} else if ([conn currentReachabilityStatus] != NotReachable) {
// wifi,
NSLog(@" ");
} else { //
NSLog(@" ");
}
}
@end