美文网首页
AFNetworking--(翻译)

AFNetworking--(翻译)

作者: 元昊 | 来源:发表于2017-09-21 10:02 被阅读36次
    AFNetworking.png

    AFNetworking是iOS和Mac OS X的令人愉快的网络库。它建立在基础URL加载系统的顶部,将强大的高级网络抽象扩展到Cocoa中。它具有模块化架构,设计精良,功能丰富的API,使用起来非常舒适。
    无论如何,所有这一切最重要的特征也许是每天使用和贡献AFNetworking的惊人的开发者社区。AFNetworking为iPhone,iPad和Mac上的一些最受欢迎和最受欢迎的应用程序提供支持。
    选择AFNetworking为您的下一个项目,或迁移您现有的项目 - 你会很高兴你所做的!

    如何开始

    沟通方式

    • 如需帮助,请移步Stack Overflow(Tag'afnetworking')
    • 或问一个问题,还是楼上方法
    • 如果您发现了一个bug,并且可以提供可靠再现的步骤,请打开一个issue。
    • 如果您有功能请求,请打开issue。
    • 如果您想贡献,请提交拉动请求。

    安装
    AFNetworking支持在项目中安装库的多种方法。

    使用CocoaPods安装

    CocoaPods 是一个Objective-C的依赖管理器。它可以自动化并简化在项目中使用AFNetworking这样的第三方库的过程。看一下 "Getting Started" guide for more information,您可以使用以下命令安装它

    $ gem install cocoapods
    

    注意:需要CocoaPods 0.39.0+来构建AFNetworking 3.0.0+。

    Podfile
    使用CocoaPods将AFNetworking整合到你的工程中去,在你的Podfile中指定它。

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

    然后运行一下命令:

    $ pod install
    

    使用 Carthage 安装

    Carthage是一个分散的依赖管理器,可以构建您的依赖关系并为您提供二进制框架。
    您可以使用以下命令安装Carthage与Homebrew

    $ brew update
    $ brew install carthage
    

    使用Carthage将AFNetworking整合到你的项目中,在Cartfile中指定它:

    github "AFNetworking/AFNetworking" ~> 3.0
    

    运行carthage构建框架,并将内置的AFNetworking.framework拖到Xcode项目中。

    配置要求

    AFNetworking Version Minimum iOS Target Minimum OS X Target Minimum watchOS Target Minimum tvOS Target Notes
    3.x iOS 7 OS X 10.9 watchOS 2.0 tvOS 9.0 Xcode 7+ is required. NSURLConnectionOperation support has been removed.
    2.6 -> 2.6.3 iOS 7 OS X 10.9 watchOS 2.0 n/a Xcode 7+ is required.
    2.0 -> 2.5.4 iOS 6 OS X 10.8 n/a n/a Xcode 5+ is required. NSURLSession subspec requires iOS 7 or OS X 10.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运行时)
    

    在Swift编程? 尝试一个更传统的API集合的Alamofire。

    架构

    NSURLSession

    • AFURLSessionManager
    • AFHTTPSessionManager

    Serialization

    • < AFURLRequestSerialization >

      • AFHTTPRequestSerializer
      • AFJSONRequestSerializer
      • AFPropertyListRequestSerializer
    • < AFURLResponseSerialization >

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

      • AFSecurityPolicy
      • AFNetworkReachabilityManager

    用法

    AFURLSessionManager

    AFURLSessionManager基于指定的NSURLSessionConfiguration对象创建和管理NSURLSession对象,该对象符合<NSURLSessionTaskDelegate>,<NSURLSessionDataDelegate>,<NSURLSessionDownloadDelegate>和<NSURLSessionDelegate>。

    • 创建一个下载任务
    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<AFMultipartFormData> 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
    
    • 网址格式参数编码
    [[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监控域的可达性,以及WWAN和WiFi网络接口的地址。

    • 不要使用可达性来确定是否应该发送原始请求。
      • 你应该尝试发送它。
    • 您可以使用可达性来确定何时应自动重试请求。
      • 虽然它可能仍然失败,但可访问性通知连接可用是适时重试某些东西。
    • 网络可达性是确定请求可能失败的原因的有用工具。
      • 在网络请求失败之后,告诉他们离线的用户比给予他们一个更为技术性但准确的错误,比如“请求超时”。

    也可以看看WWDC 2012 session 706, "Networking Best Practices.".

    共享网络可连接性

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

    安全政策

    AFNetworking在Tests子目录中包含一套单元测试。 这些测试可以简单地执行您想要测试的平台框架上的测试操作。

    信用

    AFNetworking由Alamofire软件基金会拥有和维护。
    AFNetworking最初由Scott RaymondMattt ThompsonGowalla for iPhone的开发中创建。
    AFNetworking标志是由Alan Defibaugh设计的。
    最重要的是,感谢AFNetworking越来越多的贡献者

    安全披露

    如果您认为已经使用AFNetworking确定了安全漏洞,则应尽快通过电子邮件将其报告给security@alamofire.org。 请不要将其发布到公共问题跟踪器。

    许可

    AFNetworking是根据MIT许可证发布的。 有关详细信息,请参阅许可证。

    原文地址:https://github.com/AFNetworking/AFNetworking

    欢迎大家围观,如有不足请多指点,谢谢

    相关文章

      网友评论

          本文标题:AFNetworking--(翻译)

          本文链接:https://www.haomeiwen.com/subject/qmczsxtx.html