应对17年app store审核https的iOS网络修改策略

iOS 9 AFNetworking3.x 使用整理 (https)

简述

AFNetworking 是轻量级的网络库,使用它 非常方便。以前使用AFNetworking 1.x 访问 https 只是 配置一个宏,但最近升级AFNetworking 3.x 访问 https接口 时出现了各种问题 如code =9813 的这种错误 ,解决过程也是在网上查的结果,各种的试还是不成功。主要是 忽略了证书的导入,和 AFNetworking 的AFSecurityPolicy配置不正确。所以你 一定要记得去向 服务器开发人员和部署人员 要证书,要不肯定不行。。。

导入 AFNetworking

方式 1:

下载AFNetworking, 解压后把里面的 AFNetworking 文件夹拖入你的项目

方式 2:

当然你也可以使用cocopod 将AFNetworking 加载到你的项目。在命令行 cd 到你工程的主目录下输入命令 vi Podfile ,即创建 Podfile 文件,并写入 以下:

   platform :ios, '7.0'
   pod "AFNetworking"
记得关闭xcode,然后再输入命令* pod install *即可将AFNetworking 导入到你的工程

导入 cer 证书

向服务器要配置服务器时 生成的.crt 文件 然后在命令行输入命令 : openssl x509 -in server.crt -out client.cer -outform der 将生成 的.cer 文件导入你的工程(直接拖入即可)

使用


封装
最好对 AFNetworking 进行简单的封装 ,这样可以对网络请求相关的统一管理。如:

//
//  ZXJAppHTTPClient.h
//  AFNetworkingDemo
//
//  Created by zhangxiaojing on 16/1/13.
//  Copyright © 2016年 XXX. All rights reserved.
//

#import 

@interface ZXJAppHTTPClient : AFHTTPSessionManager
+ (instancetype)sharedUserSVRClient;
+ (instancetype)sharedHtmlSVRClient;

@end

注意

设置AFSecurityPolicy 的模式一定得是AFSSLPinningModePublicKey,这样才会允许无效的非官方的内置证书请求通过。如:

+ (instancetype)sharedUserSVRClient {
    static ZXJAppHTTPClient *sharedUserSVRClient = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedUserSVRClient = [[ZXJAppHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:kParAPIBaseUserServiceURLString]];
        sharedUserSVRClient.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey];        sharedUserSVRClient.securityPolicy.allowInvalidCertificates = YES;  
    });

    return sharedUserSVRClient;
}

使用实例 1 -json


    [[ZXJAppHTTPClient sharedUserSVRClient] POST:loginApiPort parameters:dictParLogin progress:nil success:^(NSURLSessionDataTask * __unused task, id JSON)
    {
        NSLog(@"成功 返回:\n%@\n",(NSDictionary *)JSON);
    } failure:^(NSURLSessionDataTask *__unused task, NSError *error) {
        NSLog(@"%@",error);
    }];

使用实例 2 -html

ios9 webview 访问https 网址,各种坑,直接使用 afnetworking 简单易用:

  [[NSURLCache sharedURLCache] removeAllCachedResponses];
    [[NSURLCache sharedURLCache] setDiskCapacity:0];
    [[NSURLCache sharedURLCache] setMemoryCapacity:0];
    [[ZXJAppHTTPClient sharedHtmlSVRClient] POST:@"test.html" parameters:nil progress:nil success:^(NSURLSessionDataTask * __unused task, id responseObject) {
        NSLog(@"成功 ");         
        self.webView.delegate =self;
        [self.webView loadData:responseObject MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@"https://baseUrl/test.html"]];    

    } failure:^(NSURLSessionDataTask *__unused task, NSError *error) {      
        NSLog(@"失败 %@",error);
    }];

注:文章转录自CSDNRoselind的小屋,仅供大家参考使用 http://blog.csdn.net/qq_16086969/article/details/50543378

你可能感兴趣的:(应对17年app store审核https的iOS网络修改策略)