美文网首页iOS-Objective-C
AF iOS11 HTTPS双向验证后闪退问题

AF iOS11 HTTPS双向验证后闪退问题

作者: 追沐 | 来源:发表于2017-11-03 17:27 被阅读34次

问题描述

iOS11 HTTPS做双向验证后,使用AF时闪退。不加全局断点的话奔溃到iOS11的系统库里面:

iOS11.png

加全局断点的话闪退到AF里:

AF.png

原因

  • 如果是HTTP类型的URL,还走验证的话会闪退

  • 如果是HTTPS类型的URL,初始化AFHTTPSessionManager的时候用init方法会闪退。

两种情况

1、如果是HTTP类型的URL,初始化AFHTTPSessionManager对象的时候

 _httpSessionManager = [AFHTTPSessionManager manager];
_httpSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
[_httpSessionManager.requestSerializer setValue:@"text/plain" forHTTPHeaderField:@"Content-Type"];
self.timeoutInterval = NETWORK_REQUST_TIME_OUT;
_httpSessionManager.requestSerializer.timeoutInterval = self.timeoutInterval;

这样的iOS11 HTTPS接口直接会闪退

2、如果做HTTPS验证

//需要在建立 AFHTTPSessionManager的同时设置baseUrl
 _httpSessionManager = [[AFHTTPSessionManager manager] initWithBaseURL:[NSURL URLWithString:Connect_Host_Url]];
_httpSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
[_httpSessionManager.requestSerializer setValue:@"text/plain" forHTTPHeaderField:@"Content-Type"];
self.timeoutInterval = NETWORK_REQUST_TIME_OUT;
_httpSessionManager.requestSerializer.timeoutInterval = self.timeoutInterval; 
//https验证
[_httpSessionManager setSecurityPolicy:[DDRequestManager customSecurityPolicy]];

这样的话HTTPS不会有什么问题,但是HTTP接口就会直接闪退。初始化_httpSessionManager的时候用_httpSessionManager = [AFHTTPSessionManager manager]方法会导致HTTPS接口闪退。

解决

  • HTTP的接口创建AFHTTPSessionManager对象时,可以不用设置baseUrl,用_httpSessionManager = [AFHTTPSessionManager manager]也没问题,但是不能做验证。

  • 如果是HTTPS的接口则必须指定baseUrl用 _httpSessionManager = [[AFHTTPSessionManager manager] initWithBaseURL:[NSURL URLWithString:Connect_Host_Url]]方法,而且需要做HTTPS验证。

如果需要两者兼容:

//需要在建立 AFHTTPSessionManager的同时设置baseUrl
_httpSessionManager = [[AFHTTPSessionManager manager] initWithBaseURL:[NSURL URLWithString:Connect_Host_Url]];
//指定可接收服务器的数据的类型
_httpSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
//指定向服务器发送的数据的类型
[_httpSessionManager.requestSerializer setValue:@"text/plain" forHTTPHeaderField:@"Content-Type"];
self.timeoutInterval = NETWORK_REQUST_TIME_OUT;
if ([Connect_Host_Url containsString:@"https"]) {
    [_httpSessionManager setSecurityPolicy:[DDRequestManager customSecurityPolicy]];
}

不管是HTTP还是HTTPS _httpSessionManager = [[AFHTTPSessionManager manager] initWithBaseURL:[NSURL URLWithString:Connect_Host_Url]]方法都是可以的,HTTPS需要做下验证,HTTP不需要。这样就不会导致闪退问题了,兼容线上。

相关文章

网友评论

    本文标题:AF iOS11 HTTPS双向验证后闪退问题

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