我有一种情况,我需要向服务器发送请求,这在我们在请求时有可用的互联网连接时比较简单。
但是我需要以这样一种方式编写重试机制:如果当前互联网连接不可用,并且当互联网连接恢复时,我们应该将请求重新发送到服务器。如何在iOS中实现与android一样的效果,并且可以通过不同方式轻松实现。iOS开发的新手,所以任何示例都会有很大帮助。
我正在使用物镜C
如果您使用的是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
或最后,您可以使用“ 可达性”来检测网络更改并再次重试网络请求。
| 归档时间: |
|
| 查看次数: |
1191 次 |
| 最近记录: |