source manager example swift alamofire

swift - manager - Manejar el tiempo de espera con Alamofire



use alamofire in swift 4 (5)

Swift 3, Alamofire 4.5.0

Quería establecer el mismo tiempo de espera para cada llamada HTTP en mi proyecto.

La idea clave es declarar el Administrador de sesión de Alamofire como una variable global . Luego, para crear una variable URLSessionConfiguration , establezca su tiempo de espera en segundos y asígnelo al administrador.

Cada llamada en el proyecto puede usar este administrador de sesión configurado.

En mi caso, la variable global Alamofire Session Manager se configuró en el archivo AppDelegate (globalmente) y su configuración se administró en su método didFinishLaunchingWithOptions

AppDelegate.swift

import UIKit var AFManager = SessionManager() @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForRequest = 4 // seconds configuration.timeoutIntervalForResource = 4 //seconds AFManager = Alamofire.SessionManager(configuration: configuration) return true } ... }

A partir de ahora, se puede llamar a la función de solicitud de Alamofire desde cualquier parte de la aplicación utilizando afManager .

Por ejemplo:

AFManager.request("yourURL", method: .post, parameters: parameters, encoding: JSONEncoding.default).validate().responseJSON { response in ... }

¿Es posible agregar un controlador de tiempo de espera para la solicitud de Alamofire?

En mi proyecto utilizo Alamofire de esta manera:

init() { let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.timeoutIntervalForRequest = 30 self.alamofireManager = Alamofire.Manager(configuration: configuration) } func requestAuthorizationWithEmail(email:NSString, password:NSString, completion: (result: RequestResult) -> Void) { self.alamofireManager!.request(.POST, "myURL", parameters:["email": email, "password":password]) .responseJSON { response in switch response.result { case .Success(let JSON): //do json stuff case .Failure(let error): print("/n/nAuth request failed with error:/n /(error)") completion(result: .ConnectionFailed) } } }

EDITAR:

solicitar mensaje de error

Error de dominio = NSURLErrorDomain Code = -1001 "El tiempo de espera caducó." UserInfo = {NSUnderlyingError = 0x7fc10b937320 {Error , NSLocalizedDescription = La solicitud ha caducado.}


Puede comparar error.code y si es igual a -1001 que es NSURLErrorTimedOut entonces sabe que este fue un tiempo de espera.

Swift 3, Alamofire 4.0.1

let manager = Alamofire.SessionManager.default manager.session.configuration.timeoutIntervalForRequest = 120 manager.request("yourUrl", method: .post, parameters: ["parameterKey": "value"]) .responseJSON { response in switch (response.result) { case .success: //do json stuff break case .failure(let error): if error._code == NSURLErrorTimedOut { //HANDLE TIMEOUT HERE } print("/n/nAuth request failed with error:/n /(error)") break } }

Swift 2.2

self.alamofireManager!.request(.POST, "myURL", parameters:["email": email, "password":password]) .responseJSON { response in switch response.result { case .Success(let JSON): //do json stuff case .Failure(let error): if error._code == NSURLErrorTimedOut { //HANDLE TIMEOUT HERE } print("/n/nAuth request failed with error:/n /(error)") completion(result: .ConnectionFailed) } }


Swift 3

La respuesta aceptada no funcionó para mí.

Después de mucha investigación me gustó esto.

let manager = Alamofire.SessionManager.default manager.session.configuration.timeoutIntervalForRequest = 120 manager.request("yourUrl", method: .post, parameters: ["parameterKey": "value"])


Swift 3.x

La respuesta aceptada no funcionó para mí también.

Este trabajo para mí!

let url = URL(string: "yourStringUrl")! var urlRequest = URLRequest(url: url) urlRequest.timeoutInterval = 5 // or what you want

Y después:

Alamofire.request(urlRequest).response(completionHandler: { (response) in /// code here }


Swift 3.x

class NetworkHelper { static let shared = NetworkHelper() var manager: SessionManager { let manager = Alamofire.SessionManager.default manager.session.configuration.timeoutIntervalForRequest = 10 return manager } func postJSONData( withParams parameters: Dictionary<String, Any>, toUrl urlString: String, completion: @escaping (_ error: Error,_ responseBody: Dictionary<String, AnyObject>?)->()) { manager.request(urlString, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in if let error = response.result.error { if error._code == NSURLErrorTimedOut { print("Time out occurs!") } } } } }