AFNetworking说明书

AFNetworking说明书_第1张图片
图片来之网络

AFNetworking是为iOS和Mac OS X系统提供的一个简单方便的网络库。它是建立在基础URL加载系统,扩展为非常高级的网络抽象,成为Cocoa的组成部分。它有一个设计完美的模块化架构,有个很多方便使用并功能多样的接口。也许最重要的特色,无论如何,应该是为每天使用AFNetworking或给AFNetworking提供帮助的开发者提供令人惊喜的社区。AFNetworking在iPhone,iPad和Mac上被一些最受欢迎和受人好评的应用使用。
在你的下一个项目或移植你的当前项目选择使用AFNetworking,你将会非常高兴你现在的选择。

怎么开始

  • 下载AFNetworking和试用其中包含的Mac和iPhone的样例应用
  • 阅读[“开始”指南](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking ""开始"指南"),FAQ或其他在wiki上的文章
  • 看看关于AFNetworking全面的接口的文档
  • 阅读从2.0到3.0架构改变的AFNetworking 3.0 迁移指南

交流

  • 如果你需要帮助,使用Stack Overflow。(标签‘afnetworking’)
  • 如果你想问问题,使用Stack Overflow。
  • 如果你发现bug并且能够提供重现的步骤,请新开一个issue。
  • 如果你有一个新特性请求,请新开一个issue。
  • 如果你想为AFNetworking添砖加瓦,请提交一个pull请求。

安装

在工程中使用AFNetworking库,AFNetworking提供了多种安装方法。

PODFILE

使用CocoaPods继承AFNetworking到你的Xcode工程中,在你的Podfile中添加以下内容:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
 
pod 'AFNetworking', '~> 3.0'

然后,执行以下命令:
pod install

要求

AFNetworking版本 iOS最低版本 OS X最低版本 watchOS最低版本 tvOS最低版本 注意
3.x iOS 7 OSX 10.9 watchOS 2.0 tvOS 9.0 必须使用Xcode7及以上.NSURLConnectionOperation已经移除
2.6->2.6.3 iOS 7 OS X 10.9 watchOS 2.0 n/a 必须使用Xcode7及以上
2.0->2.5.4 iOS 6 OS X10.8 n/a n/a 必须使用Xcode5及以上。NSURLSession需要iOS 7 或 OS X10.9
1.x iOS 5 Mac OS X 10.7 n/a n/a
0.10.x iOS 4 Mac OS X 10.6 n/a n/a

(OS X必须支持64位的Cocoa runtime)如果项目是使用Swift编写,请尝试使用Alamofire.

架构

NSURLSession

  • AFURLSessionManager
  • AFHTTPSessionManager

序列化

  • AFHTTPRequestSerializer
  • AFJSONRequestSerializer
  • AFPropertyListRequestSerializer

  • AFHTTPResponseSerializer
  • AFJSONResponseSerializer
  • AFXMLParserResponseSerializer
  • AFXMLDocumentResponseSerializer (Mac OS X)
  • AFPropertyListResponseSerializer
  • AFImageResponseSerializer
  • AFCompoundResponseSerializer

额外方法

  • AFSecurityPolicy
  • AFNetworkReachabilityManager

使用

AFURLSessionManager

AFURLSessionManager创建和管理一个在NSURLSeesionConfigutarion对象基础上的NSURLSession对象,并遵循协议。

创建一个下载任务

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
    NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
    return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
    NSLog(@"File downloaded to: %@", filePath);
}];
[downloadTask resume];

创建一个上传任务

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"Success: %@ %@", response, responseObject);
    }
}];
[uploadTask resume];

创建一个上传多重部分请求的任务,并显示上传进度

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id formData) {
        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil];
    } error:nil];

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

NSURLSessionUploadTask *uploadTask;
uploadTask = [manager
              uploadTaskWithStreamedRequest:request
              progress:^(NSProgress * _Nonnull uploadProgress) {
                  // This is not called back on the main queue.
                  // You are responsible for dispatching to the main queue for UI updates
                  dispatch_async(dispatch_get_main_queue(), ^{
                      //Update the progress view
                      [progressView setProgress:uploadProgress.fractionCompleted];
                  });
              }
              completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
                  if (error) {
                      NSLog(@"Error: %@", error);
                  } else {
                      NSLog(@"%@ %@", response, responseObject);
                  }
              }];

[uploadTask resume];

创建一个获取数据的任务

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:@"http://httpbin.org/get"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"%@ %@", response, responseObject);
    }
}];
[dataTask resume];

请求序列化

请求序列化从URL字符串创建请求,编码参数成为一个查询字符串或HTTP内容。

NSString *URLString = @"http://example.com";
NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]};

查询字符串参数编码

[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil];

编码后为

GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3

URL格式参数编码

[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];

编码后为

POST http://example.com/
Content-Type: application/x-www-form-urlencoded

foo=bar&baz[]=1&baz[]=2&baz[]=3

JSON参数编码

[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];

编码后为

POST http://example.com/
Content-Type: application/json

{"foo": "bar", "baz": [1,2,3]}

网络可达性管理

AFNetworkReachabilityManager监控域和IP地址通过WWAN和WiFi网络是否可达。

  • 不要使用可达性去判断原始请求是否需要发送。(应该尝试的发送
  • 你可以使用可达性去判断,一个请求是否应该自动重发。(虽然它可能仍然失败,但是收到网络连接可用的可达性通知后,非常合适再去重试发送
  • 网络可达性是判断一个请求失败的原因的最好工具。(当一个网络请求失败后,告诉用户已经离线了比显示一个比如“请求超时”的技术信息好,所以提示很正确
    你也可以看WWDC 2012 706讲 “网络最好实践”.

共享的网络可达性

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
}];

[[AFNetworkReachabilityManager sharedManager] startMonitoring];

安全策略

AFSecurityPolicy通过X.509证书和公共密钥安全连接,来评估服务器的可靠性。
添加固定的SSL证书到你的应用中,帮忙保护中间人攻击和其他弱点。应用处理敏感的用户数据或财务信息,强烈建议所有的通讯通过SSL固定证书并且已经使能的HTTPS链接。

允许无效的SSL证书

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.securityPolicy.allowInvalidCertificates = YES; // not recommended for production

单元测试

AFNetworking在Tests子目录中包含一系列的单元测试。这些单元测试可以很方便的运行,你会喜欢在framework平台上可以执行测试事件。

信用

Alamofire软件基金会拥有和维护AFNetworking。
GowallaiPhone开发部门的Scott Raymond和Mattt Thompson创建了最初的AFNetworking版本。
Alan Defibaugh设计了AFNetworking的图标。
总之,感谢AFNetworking的贡献者.

安全公开

如果你确信你已经鉴定AFNetworking存在安全缺陷,请尽快的发送通过邮件发送到[email protected]. 请不要将它发送为一个公开的问题跟踪。

许可证

AFNetworking遵守MIT许可证。详见LICENSE。


类说明

  • AFAutoPurgingImageCache
  • AFCompoundResponseSerializer
  • AFHTTPRequestSerializer
  • AFHTTPResponseSerializer
  • AFHTTPSessionManager
  • AFImageDownloadReceipt
  • AFImageDownloader
  • AFImageResponseSerializer
  • AFJSONRequestSerializer
  • AFJSONResponseSerializer
  • AFNetworkActivityIndicatorManager
  • AFNetworkReachabilityManager
  • AFPropertyListRequestSerializer
  • AFSecurityPolicy
  • AFURLSessionManager
  • AFXMLDocumentResponseSerializer
  • AFXMLParserResponseSerializer

协议说明

  • AFImageCache
  • AFImageRequestCache
  • AFMultipartFormData
  • AFURLRequestSerialization
  • AFURLResponseSerialization

扩展说明

  • UIActivityIndicatorView(AFNetworking)
  • UIButton(AFNetworking)
  • UIImage(AFNetworking)
  • UIImageView(AFNetworking)
  • UIProgressView(AFNetworking)
  • UIRefreshControl(AFNetworking)
  • UIWebview(AFNetworking)

常量说明

  • AFHTTPRequestQueryStringSerializationStyle
  • AFImageDownloadPrioritization
  • AFNetworkReachabilityStatus
  • AFSSLPinningMode

// END 2017年7月18日 中午

你可能感兴趣的:(AFNetworking说明书)