URLSessionClient
CLASS
URLSessionClient
1open class URLSessionClient: NSObject, URLSessionDelegate, URLSessionTaskDelegate, URLSessionDataDelegate
A class to handle URL Session calls that will support background execution, but still (mostly) use callbacks for its primary method of communication.
NOTE: Delegate methods implemented here are not documented inline because Apple has their own documentation for them. Please consult Apple's documentation for how the delegate methods work and what needs to be overridden and handled within your app, particularly in regards to what needs to be called when for background sessions.
Properties
session
1open private(set) var session: URLSession!
The raw URLSession being used for this client
Methods
init(sessionConfiguration:callbackQueue:)
1public init(sessionConfiguration: URLSessionConfiguration = .default,
2 callbackQueue: OperationQueue? = .main)
Designated initializer.
Parameters:
sessionConfiguration: The
URLSessionConfiguration
to use to set up the URL session.callbackQueue: [optional] The
OperationQueue
to tell the URL session to call back to this class on, which will in turn call back to your class. Defaults to.main
.
Parameters
Name | Description |
---|---|
sessionConfiguration | The URLSessionConfiguration to use to set up the URL session. |
callbackQueue | [optional] The OperationQueue to tell the URL session to call back to this class on, which will in turn call back to your class. Defaults to .main . |
invalidate()
1public func invalidate()
Cleans up and invalidates everything related to this session client.
NOTE: This must be called from the deinit
of anything holding onto this client in order to break a retain cycle with the delegate.
clear(task:)
1open func clear(task identifier: Int)
Clears underlying dictionaries of any data related to a particular task identifier.
Parameter identifier: The identifier of the task to clear.
Parameters
Name | Description |
---|---|
identifier | The identifier of the task to clear. |
clearAllTasks()
1open func clearAllTasks()
Clears underlying dictionaries of any data related to all tasks.
Mostly useful for cleanup and/or after invalidation of the URLSession
.
sendRequest(_:rawTaskCompletionHandler:completion:)
1open func sendRequest(_ request: URLRequest,
2 rawTaskCompletionHandler: RawCompletion? = nil,
3 completion: @escaping Completion) -> URLSessionTask
The main method to perform a request.
Parameters:
request: The request to perform.
rawTaskCompletionHandler: [optional] A completion handler to call once the raw task is done, so if an Error requires access to the headers, the user can still access these.
completion: A completion handler to call when the task has either completed successfully or failed.
Returns: The created URLSession task, already resumed, because nobody ever remembers to call
resume()
.
Parameters
Name | Description |
---|---|
request | The request to perform. |
rawTaskCompletionHandler | [optional] A completion handler to call once the raw task is done, so if an Error requires access to the headers, the user can still access these. |
completion | A completion handler to call when the task has either completed successfully or failed. |
cancel(task:)
1open func cancel(task: URLSessionTask)
Cancels a given task and clears out its underlying data.
NOTE: You will not receive any kind of "This was cancelled" error when this is called.
Parameter task: The task you wish to cancel.
Parameters
Name | Description |
---|---|
task | The task you wish to cancel. |
urlSession(_:didBecomeInvalidWithError:)
1open func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?)
urlSession(_:task:didFinishCollecting:)
1open func urlSession(_ session: URLSession,
2 task: URLSessionTask,
3 didFinishCollecting metrics: URLSessionTaskMetrics)
urlSession(_:didReceive:completionHandler:)
1open func urlSession(_ session: URLSession,
2 didReceive challenge: URLAuthenticationChallenge,
3 completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void)
urlSessionDidFinishEvents(forBackgroundURLSession:)
urlSession(_:task:didReceive:completionHandler:)
1open func urlSession(_ session: URLSession,
2 task: URLSessionTask,
3 didReceive challenge: URLAuthenticationChallenge,
4 completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void)
urlSession(_:taskIsWaitingForConnectivity:)
1open func urlSession(_ session: URLSession,
2 taskIsWaitingForConnectivity task: URLSessionTask)
urlSession(_:task:didCompleteWithError:)
1open func urlSession(_ session: URLSession,
2 task: URLSessionTask,
3 didCompleteWithError error: Error?)
urlSession(_:task:needNewBodyStream:)
1open func urlSession(_ session: URLSession,
2 task: URLSessionTask,
3 needNewBodyStream completionHandler: @escaping (InputStream?) -> Void)
urlSession(_:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:)
1open func urlSession(_ session: URLSession,
2 task: URLSessionTask,
3 didSendBodyData bytesSent: Int64,
4 totalBytesSent: Int64,
5 totalBytesExpectedToSend: Int64)
urlSession(_:task:willBeginDelayedRequest:completionHandler:)
1open func urlSession(_ session: URLSession,
2 task: URLSessionTask,
3 willBeginDelayedRequest request: URLRequest,
4 completionHandler: @escaping (URLSession.DelayedRequestDisposition, URLRequest?) -> Void)
urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)
1open func urlSession(_ session: URLSession,
2 task: URLSessionTask,
3 willPerformHTTPRedirection response: HTTPURLResponse,
4 newRequest request: URLRequest,
5 completionHandler: @escaping (URLRequest?) -> Void)
urlSession(_:dataTask:didReceive:)
1open func urlSession(_ session: URLSession,
2 dataTask: URLSessionDataTask,
3 didReceive data: Data)
urlSession(_:dataTask:didBecome:)
1open func urlSession(_ session: URLSession,
2 dataTask: URLSessionDataTask,
3 didBecome streamTask: URLSessionStreamTask)
urlSession(_:dataTask:didBecome:)
1open func urlSession(_ session: URLSession,
2 dataTask: URLSessionDataTask,
3 didBecome downloadTask: URLSessionDownloadTask)
urlSession(_:dataTask:willCacheResponse:completionHandler:)
1open func urlSession(_ session: URLSession,
2 dataTask: URLSessionDataTask,
3 willCacheResponse proposedResponse: CachedURLResponse,
4 completionHandler: @escaping (CachedURLResponse?) -> Void)
urlSession(_:dataTask:didReceive:completionHandler:)
1open func urlSession(_ session: URLSession,
2 dataTask: URLSessionDataTask,
3 didReceive response: URLResponse,
4 completionHandler: @escaping (URLSession.ResponseDisposition) -> Void)