我的应用程序的执行通常在didReceiveChallenge中停止2-3秒(甚至5秒)。十分之一的时间是永远的。
整个过程都有效,但是我可以做些什么来加快速度呢?
这是我的代码:
- (void)URLSession:(NSURLSession *)session
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * __nullable credential))completionHandler{
NSLog(@"*** KBRequest.NSURLSessionDelegate - didReceiveChallenge IOS10");
if([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]){
if([challenge.protectionSpace.host isEqualToString:@"engine.my.server"]){
NSURLCredential *credential = [NSURLCredential credentialForTrust: challenge.protectionSpace.serverTrust];
completionHandler(NSURLSessionAuthChallengeUseCredential,credential);
}
else{
completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil);
}
}
}
最佳答案
每次调用此方法时,都必须调用完成处理程序。您仅将其称为单个保护空间。
当操作系统在您的委托上调用此方法时,NSURLSession
堆栈会忠实地坐在那里,等待您调用完成处理程序块。如果您无法调用完成处理程序,那么您的请求将陷入困境,直到请求超时。
要解决此问题,请在方法底部添加:
} else {
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
}
关于ios - URLSession didReceiveChallenge太慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42784810/