如果连接不可用,则针对服务请求的iOS重试机制

Jit*_*yay 5 iphone ios

我有一种情况,我需要向服务器发送请求,这在我们在请求时有可用的互联网连接时比较简单。

但是我需要以这样一种方式编写重试机制:如果当前互联网连接不可用,并且当互联网连接恢复时,我们应该将请求重新发送到服务器。如何在iOS中实现与android一样的效果,并且可以通过不同方式轻松实现。iOS开发的新手,所以任何示例都会有很大帮助。

我正在使用物镜C

Suh*_*til 5

如果您使用的是Alamofire,则它们是RequestRetrier协议,可让您重试网络请求(文档链接

class RetryHandler: RequestAdapter, RequestRetrier {
    public func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: RequestRetryCompletion) {
        if let response = request.task.response as? HTTPURLResponse, response.statusCode == 401 {
            completion(true, 1.0) // retry after 1 second
        } else {
            completion(false, 0.0) // don't retry
        }
    }
}

let sessionManager = SessionManager()
sessionManager.retrier = RetryHandler()

sessionManager.request(urlString).responseJSON { response in
    debugPrint(response)
}
Run Code Online (Sandbox Code Playgroud)

如果您使用的是URLSession,那么在iOS 11中,Apple已添加了waitsForConnectivity标志,该标志会等到网络连接可用后再尝试连接

let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 120
configuration.timeoutIntervalForResource = 120
if #available(iOS 11, *) {
  configuration.waitsForConnectivity = true
}
let session = URLSession(configuration: configuration)
Run Code Online (Sandbox Code Playgroud)

注意:会话仅在尝试初始连接时等待。如果网络在建立连接后掉线,则您将像iOS 10一样通过完成处理程序或会话委托返回错误。timeoutIntervalForResource

或最后,您可以使用“ 可达性”来检测网络更改并再次重试网络请求。