FWURLSessionManager


@interface FWURLSessionManager
    : NSObject <NSURLSessionDelegate, NSURLSessionTaskDelegate,
                NSURLSessionDataDelegate, NSURLSessionDownloadDelegate,
                NSSecureCoding, NSCopying>

FWURLSessionManager creates and manages an NSURLSession object based on a specified NSURLSessionConfiguration object, which conforms to <NSURLSessionTaskDelegate>, <NSURLSessionDataDelegate>, <NSURLSessionDownloadDelegate>, and <NSURLSessionDelegate>.

Subclassing Notes

This is the base class for FWHTTPSessionManager, which adds functionality specific to making HTTP requests. If you are looking to extend FWURLSessionManager specifically for HTTP, consider subclassing FWHTTPSessionManager instead.

NSURLSession & NSURLSessionTask Delegate Methods

FWURLSessionManager implements the following delegate methods:

NSURLSessionDelegate

  • URLSession:didBecomeInvalidWithError:
  • URLSession:didReceiveChallenge:completionHandler:
  • URLSessionDidFinishEventsForBackgroundURLSession:

NSURLSessionTaskDelegate

  • URLSession:willPerformHTTPRedirection:newRequest:completionHandler:
  • URLSession:task:didReceiveChallenge:completionHandler:
  • URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:
  • URLSession:task:needNewBodyStream:
  • URLSession:task:didCompleteWithError:

NSURLSessionDataDelegate

  • URLSession:dataTask:didReceiveResponse:completionHandler:
  • URLSession:dataTask:didBecomeDownloadTask:
  • URLSession:dataTask:didReceiveData:
  • URLSession:dataTask:willCacheResponse:completionHandler:

NSURLSessionDownloadDelegate

  • URLSession:downloadTask:didFinishDownloadingToURL:
  • URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:
  • URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:

If any of these methods are overridden in a subclass, they must call the super implementation first.

Network Reachability Monitoring

Network reachability status and change monitoring is available through the reachabilityManager property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See FWNetworkReachabilityManager for more details.

NSCoding Caveats

  • Encoded managers do not include any block properties. Be sure to set delegate callback blocks when using -initWithCoder: or NSKeyedUnarchiver.

NSCopying Caveats

  • -copy and -copyWithZone: return a new manager with a new NSURLSession created from the configuration of the original.
  • Operation copies do not include any delegate callback blocks, as they often strongly captures a reference to self, which would otherwise have the unintuitive side-effect of pointing to the original session manager when copied.

Warning

Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance.

  • The managed session.

    Declaration

    Objective-C

    @property (nonatomic, strong, readonly) NSURLSession *_Nonnull session;
  • The operation queue on which delegate callbacks are run.

    Declaration

    Objective-C

    @property (nonatomic, strong, readonly) NSOperationQueue *_Nonnull operationQueue;
  • Responses sent from the server in data tasks created with dataTaskWithRequest:success:failure: and run using the GET / POST / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of FWJSONResponseSerializer.

    Warning

    responseSerializer must not be nil.

    Declaration

    Objective-C

    @property (nonatomic, strong) id<FWURLResponseSerialization> _Nonnull responseSerializer;

Managing Security Policy

  • The security policy used by created session to evaluate server trust for secure connections. FWURLSessionManager uses the defaultPolicy unless otherwise specified.

    Declaration

    Objective-C

    @property (nonatomic, strong) FWSecurityPolicy *_Nonnull securityPolicy;

Monitoring Network Reachability

Getting Session Tasks

  • The data, upload, and download tasks currently run by the managed session.

    Declaration

    Objective-C

    @property (nonatomic, strong, readonly) NSArray<NSURLSessionTask *> *_Nonnull tasks;
  • The data tasks currently run by the managed session.

    Declaration

    Objective-C

    @property (nonatomic, strong, readonly) NSArray<NSURLSessionDataTask *> *_Nonnull dataTasks;
  • The upload tasks currently run by the managed session.

    Declaration

    Objective-C

    @property (nonatomic, strong, readonly) NSArray<NSURLSessionUploadTask *> *_Nonnull uploadTasks;
  • The download tasks currently run by the managed session.

    Declaration

    Objective-C

    @property (nonatomic, strong, readonly) NSArray<NSURLSessionDownloadTask *> *_Nonnull downloadTasks;

Managing Callback Queues

  • The dispatch queue for completionBlock. If NULL (default), the main queue is used.

    Declaration

    Objective-C

    @property (nonatomic, strong, nullable) dispatch_queue_t completionQueue;
  • The dispatch group for completionBlock. If NULL (default), a private dispatch group is used.

    Declaration

    Objective-C

    @property (nonatomic, strong, nullable) dispatch_group_t completionGroup;

Initialization

  • Creates and returns a manager for a session created with the specified configuration. This is the designated initializer.

    Declaration

    Objective-C

    - (nonnull instancetype)initWithSessionConfiguration:
        (nullable NSURLSessionConfiguration *)configuration;

    Parameters

    configuration

    The configuration used to create the managed session.

    Return Value

    A manager for a newly-created session.

  • Invalidates the managed session, optionally canceling pending tasks and optionally resets given session.

    Declaration

    Objective-C

    - (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks
                               resetSession:(BOOL)resetSession;

    Parameters

    cancelPendingTasks

    Whether or not to cancel pending tasks.

    resetSession

    Whether or not to reset the session of the manager.

Running Data Tasks

  • Creates an NSURLSessionDataTask with the specified request.

    Declaration

    Objective-C

    - (nonnull NSURLSessionDataTask *)
        dataTaskWithRequest:(nonnull NSURLRequest *)request
             uploadProgress:(nullable void (^)(NSProgress *_Nonnull __strong))
                                uploadProgressBlock
           downloadProgress:(nullable void (^)(NSProgress *_Nonnull __strong))
                                downloadProgressBlock
          completionHandler:
              (nullable void (^)(NSURLResponse *_Nonnull __strong,
                                 id _Nullable __strong,
                                 NSError *_Nullable __strong))completionHandler;

    Parameters

    request

    The HTTP request for the request.

    uploadProgressBlock

    A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue.

    downloadProgressBlock

    A block object to be executed when the download progress is updated. Note this block is called on the session queue, not the main queue.

    completionHandler

    A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any.

  • Creates an NSURLSessionDataTask with a retry request.

    See

    -dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler:

    Declaration

    Objective-C

    - (nonnull NSURLSessionDataTask *)
        dataTaskWithRequestBuilder:
            (nonnull NSURLRequest *_Nonnull (^)(void))requestBuilder
                        retryCount:(NSInteger)retryCount
                     retryInterval:(NSTimeInterval)retryInterval
                   timeoutInterval:(NSTimeInterval)timeoutInterval
                       shouldRetry:(nullable void (^)(
                                       NSURLResponse *_Nonnull __strong,
                                       id _Nullable __strong,
                                       NSError *_Nullable __strong,
                                       void (^_Nonnull __strong)(BOOL)))shouldRetry
                       taskHandler:
                           (nullable void (^)(
                               NSURLSessionDataTask *_Nonnull __strong))taskHandler
                    uploadProgress:(nullable void (^)(
                                       NSProgress *_Nonnull __strong))uploadProgress
                  downloadProgress:
                      (nullable void (^)(NSProgress *_Nonnull __strong))
                          downloadProgress
                 completionHandler:
                     (nullable void (^)(
                         NSURLResponse *_Nonnull __strong, id _Nullable __strong,
                         NSError *_Nullable __strong))completionHandler;

    Parameters

    requestBuilder

    The request builder.

    retryCount

    The retry limit, eg 4.

    retryInterval

    The retry interval, eg 2.

    timeoutInterval

    The retry timeout, 0 means no timeout.

    shouldRetry

    Whether the retry should start, must call decisionHandler, default to check statusCode and error.

    taskHandler

    A block object to be executed when the retry task is created.

    uploadProgress

    A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue.

    downloadProgress

    A block object to be executed when the download progress is updated. Note this block is called on the session queue, not the main queue.

    completionHandler

    A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any.

Running Upload Tasks

  • Creates an NSURLSessionUploadTask with the specified request for a local file.

    See

    attemptsToRecreateUploadTasksForBackgroundSessions

    Declaration

    Objective-C

    - (nonnull NSURLSessionUploadTask *)
        uploadTaskWithRequest:(nonnull NSURLRequest *)request
                     fromFile:(nonnull NSURL *)fileURL
                     progress:(nullable void (^)(NSProgress *_Nonnull __strong))
                                  uploadProgressBlock
            completionHandler:
                (nullable void (^)(NSURLResponse *_Nonnull __strong,
                                   id _Nullable __strong,
                                   NSError *_Nullable __strong))completionHandler;

    Parameters

    request

    The HTTP request for the request.

    fileURL

    A URL to the local file to be uploaded.

    uploadProgressBlock

    A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue.

    completionHandler

    A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any.

  • Creates an NSURLSessionUploadTask with the specified request for an HTTP body.

    Declaration

    Objective-C

    - (nonnull NSURLSessionUploadTask *)
        uploadTaskWithRequest:(nonnull NSURLRequest *)request
                     fromData:(nullable NSData *)bodyData
                     progress:(nullable void (^)(NSProgress *_Nonnull __strong))
                                  uploadProgressBlock
            completionHandler:
                (nullable void (^)(NSURLResponse *_Nonnull __strong,
                                   id _Nullable __strong,
                                   NSError *_Nullable __strong))completionHandler;

    Parameters

    request

    The HTTP request for the request.

    bodyData

    A data object containing the HTTP body to be uploaded.

    uploadProgressBlock

    A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue.

    completionHandler

    A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any.

  • Creates an NSURLSessionUploadTask with the specified streaming request.

    Declaration

    Objective-C

    - (nonnull NSURLSessionUploadTask *)
        uploadTaskWithStreamedRequest:(nonnull NSURLRequest *)request
                             progress:
                                 (nullable void (^)(NSProgress *_Nonnull __strong))
                                     uploadProgressBlock
                    completionHandler:
                        (nullable void (^)(
                            NSURLResponse *_Nonnull __strong, id _Nullable __strong,
                            NSError *_Nullable __strong))completionHandler;

    Parameters

    request

    The HTTP request for the request.

    uploadProgressBlock

    A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue.

    completionHandler

    A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any.

Running Download Tasks

  • Creates an NSURLSessionDownloadTask with the specified request.

    Warning

    If using a background NSURLSessionConfiguration on iOS, these blocks will be lost when the app is terminated. Background sessions may prefer to use -setDownloadTaskDidFinishDownloadingBlock: to specify the URL for saving the downloaded file, rather than the destination block of this method.

    Declaration

    Objective-C

    - (nonnull NSURLSessionDownloadTask *)
        downloadTaskWithRequest:(nonnull NSURLRequest *)request
                       progress:(nullable void (^)(NSProgress *_Nonnull __strong))
                                    downloadProgressBlock
                    destination:(nullable NSURL *_Nonnull (^)(
                                    NSURL *_Nonnull __strong,
                                    NSURLResponse *_Nonnull __strong))destination
              completionHandler:
                  (nullable void (^)(NSURLResponse *_Nonnull __strong,
                                     NSURL *_Nullable __strong,
                                     NSError *_Nullable __strong))completionHandler;

    Parameters

    request

    The HTTP request for the request.

    downloadProgressBlock

    A block object to be executed when the download progress is updated. Note this block is called on the session queue, not the main queue.

    destination

    A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL.

    completionHandler

    A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any.

  • Creates an NSURLSessionDownloadTask with the specified resume data.

    Declaration

    Objective-C

    - (nonnull NSURLSessionDownloadTask *)
        downloadTaskWithResumeData:(nonnull NSData *)resumeData
                          progress:
                              (nullable void (^)(NSProgress *_Nonnull __strong))
                                  downloadProgressBlock
                       destination:(nullable NSURL *_Nonnull (^)(
                                       NSURL *_Nonnull __strong,
                                       NSURLResponse *_Nonnull __strong))destination
                 completionHandler:
                     (nullable void (^)(NSURLResponse *_Nonnull __strong,
                                        NSURL *_Nullable __strong,
                                        NSError *_Nullable __strong))
                         completionHandler;

    Parameters

    resumeData

    The data used to resume downloading.

    downloadProgressBlock

    A block object to be executed when the download progress is updated. Note this block is called on the session queue, not the main queue.

    destination

    A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL.

    completionHandler

    A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any.

Getting Progress for Tasks

  • Returns the upload progress of the specified task.

    Declaration

    Objective-C

    - (nullable NSProgress *)uploadProgressForTask:(nonnull NSURLSessionTask *)task;

    Parameters

    task

    The session task. Must not be nil.

    Return Value

    An NSProgress object reporting the upload progress of a task, or nil if the progress is unavailable.

  • Returns the download progress of the specified task.

    Declaration

    Objective-C

    - (nullable NSProgress *)downloadProgressForTask:
        (nonnull NSURLSessionTask *)task;

    Parameters

    task

    The session task. Must not be nil.

    Return Value

    An NSProgress object reporting the download progress of a task, or nil if the progress is unavailable.

  • Sets a user info to be used for the specified task.

    Declaration

    Objective-C

    - (void)setUserInfo:(nullable NSDictionary *)userInfo
                forTask:(nonnull NSURLSessionTask *)task;
  • Returns the user info of the specified task.

    Declaration

    Objective-C

    - (nullable NSDictionary *)userInfoForTask:(nonnull NSURLSessionTask *)task;
  • Sets total request count to be used for the specified response.

    Declaration

    Objective-C

    - (void)setRequestTotalCount:(NSInteger)totalCount
                     forResponse:(nonnull NSURLResponse *)response;
  • Returns the total request count of the specified response.

    Declaration

    Objective-C

    - (NSInteger)requestTotalCountForResponse:(nonnull NSURLResponse *)response;
  • Sets total request time to be used for the specified response.

    Declaration

    Objective-C

    - (void)setRequestTotalTime:(NSTimeInterval)totalTime
                    forResponse:(nonnull NSURLResponse *)response;
  • Returns the retry total request time of the specified response.

    Declaration

    Objective-C

    - (NSTimeInterval)requestTotalTimeForResponse:(nonnull NSURLResponse *)response;

Setting Session Delegate Callbacks

  • Sets a block to be executed when the managed session becomes invalid, as handled by the NSURLSessionDelegate method URLSession:didBecomeInvalidWithError:.

    Declaration

    Objective-C

    - (void)setSessionDidBecomeInvalidBlock:
        (nullable void (^)(NSURLSession *_Nonnull __strong,
                           NSError *_Nonnull __strong))block;

    Parameters

    block

    A block object to be executed when the managed session becomes invalid. The block has no return value, and takes two arguments: the session, and the error related to the cause of invalidation.

  • Sets a block to be executed when a connection level authentication challenge has occurred, as handled by the NSURLSessionDelegate method URLSession:didReceiveChallenge:completionHandler:.

    Warning

    Implementing a session authentication challenge handler yourself totally bypasses FWNetworking’s security policy defined in FWSecurityPolicy. Make sure you fully understand the implications before implementing a custom session authentication challenge handler. If you do not want to bypass FWNetworking’s security policy, use -setAuthenticationChallengeHandler: instead.

    See

    -securityPolicy

    See

    -setAuthenticationChallengeHandler:

    Declaration

    Objective-C

    - (void)setSessionDidReceiveAuthenticationChallengeBlock:
        (nullable NSURLSessionAuthChallengeDisposition (^)(
            NSURLSession *_Nonnull __strong,
            NSURLAuthenticationChallenge *_Nonnull __strong,
            NSURLCredential *__autoreleasing _Nullable *_Nullable))block;

    Parameters

    block

    A block object to be executed when a connection level authentication challenge has occurred. The block returns the disposition of the authentication challenge, and takes three arguments: the session, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge.

Setting Task Delegate Callbacks

  • Sets a block to be executed when a task requires a new request body stream to send to the remote server, as handled by the NSURLSessionTaskDelegate method URLSession:task:needNewBodyStream:.

    Declaration

    Objective-C

    - (void)setTaskNeedNewBodyStreamBlock:
        (nullable NSInputStream *_Nonnull (^)(NSURLSession *_Nonnull __strong,
                                              NSURLSessionTask *_Nonnull __strong))
            block;

    Parameters

    block

    A block object to be executed when a task requires a new request body stream.

  • Sets a block to be executed when an HTTP request is attempting to perform a redirection to a different URL, as handled by the NSURLSessionTaskDelegate method URLSession:willPerformHTTPRedirection:newRequest:completionHandler:.

    Declaration

    Objective-C

    - (void)setTaskWillPerformHTTPRedirectionBlock:
        (nullable NSURLRequest *_Nullable (^)(
            NSURLSession *_Nonnull __strong, NSURLSessionTask *_Nonnull __strong,
            NSURLResponse *_Nonnull __strong,
            NSURLRequest *_Nonnull __strong))block;

    Parameters

    block

    A block object to be executed when an HTTP request is attempting to perform a redirection to a different URL. The block returns the request to be made for the redirection, and takes four arguments: the session, the task, the redirection response, and the request corresponding to the redirection response.

  • Sets a block to be executed when a session task has received a request specific authentication challenge, as handled by the NSURLSessionTaskDelegate method URLSession:task:didReceiveChallenge:completionHandler:.

    When implementing an authentication challenge handler, you should check the authentication method first (challenge.protectionSpace.authenticationMethod) to decide if you want to handle the authentication challenge yourself or if you want FWNetworking to handle it. If you want FWNetworking to handle the authentication challenge, just return @(NSURLSessionAuthChallengePerformDefaultHandling). For example, you certainly want FWNetworking to handle certificate validation (i.e. authentication method == NSURLAuthenticationMethodServerTrust) as defined by the security policy. If you want to handle the challenge yourself, you have four options:

    1. Return nil from the authentication challenge handler. You MUST call the completion handler with a disposition and credentials yourself. Use this if you need to present a user interface to let the user enter their credentials.
    2. Return an NSError object from the authentication challenge handler. You MUST NOT call the completion handler when returning an NSError. The returned error will be reported in the completion handler of the task. Use this if you need to abort an authentication challenge with a specific error.
    3. Return an NSURLCredential object from the authentication challenge handler. You MUST NOT call the completion handler when returning an NSURLCredential. The returned credentials will be used to fulfil the challenge. Use this when you can get credentials without presenting a user interface.
    4. Return an NSNumber object wrapping an NSURLSessionAuthChallengeDisposition. Supported values are @(NSURLSessionAuthChallengePerformDefaultHandling), @(NSURLSessionAuthChallengeCancelAuthenticationChallenge) and @(NSURLSessionAuthChallengeRejectProtectionSpace). You MUST NOT call the completion handler when returning an NSNumber.

    If you return anything else from the authentication challenge handler, an exception will be thrown.

    For more information about how URL sessions handle the different types of authentication challenges, see NSURLSession and URL Session Programming Guide.

    See

    -securityPolicy

    Declaration

    Objective-C

    - (void)setAuthenticationChallengeHandler:
        (nonnull id _Nonnull (^)(
            NSURLSession *_Nonnull __strong, NSURLSessionTask *_Nonnull __strong,
            NSURLAuthenticationChallenge *_Nonnull __strong,
            void (^_Nonnull __strong)(NSURLSessionAuthChallengeDisposition,
                                      NSURLCredential *_Nullable __strong)))
            authenticationChallengeHandler;

    Parameters

    authenticationChallengeHandler

    A block object to be executed when a session task has received a request specific authentication challenge.

  • Sets a block to be executed periodically to track upload progress, as handled by the NSURLSessionTaskDelegate method URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:.

    Declaration

    Objective-C

    - (void)setTaskDidSendBodyDataBlock:
        (nullable void (^)(NSURLSession *_Nonnull __strong,
                           NSURLSessionTask *_Nonnull __strong, int64_t, int64_t,
                           int64_t))block;

    Parameters

    block

    A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes five arguments: the session, the task, the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread.

  • Sets a block to be executed as the last message related to a specific task, as handled by the NSURLSessionTaskDelegate method URLSession:task:didCompleteWithError:.

    Declaration

    Objective-C

    - (void)setTaskDidCompleteBlock:
        (nullable void (^)(NSURLSession *_Nonnull __strong,
                           NSURLSessionTask *_Nonnull __strong,
                           NSError *_Nullable __strong))block;

    Parameters

    block

    A block object to be executed when a session task is completed. The block has no return value, and takes three arguments: the session, the task, and any error that occurred in the process of executing the task.

  • Sets a block to be executed when metrics are finalized related to a specific task, as handled by the NSURLSessionTaskDelegate method URLSession:task:didFinishCollectingMetrics:.

    Declaration

    Objective-C

    - (void)setTaskDidFinishCollectingMetricsBlock:
        (nullable void (^)(NSURLSession *_Nonnull __strong,
                           NSURLSessionTask *_Nonnull __strong,
                           NSURLSessionTaskMetrics *_Nullable __strong))block;

    Parameters

    block

    A block object to be executed when a session task is completed. The block has no return value, and takes three arguments: the session, the task, and any metrics that were collected in the process of executing the task.

Setting Data Task Delegate Callbacks

  • Sets a block to be executed when a data task has received a response, as handled by the NSURLSessionDataDelegate method URLSession:dataTask:didReceiveResponse:completionHandler:.

    Declaration

    Objective-C

    - (void)setDataTaskDidReceiveResponseBlock:
        (nullable NSURLSessionResponseDisposition (^)(
            NSURLSession *_Nonnull __strong,
            NSURLSessionDataTask *_Nonnull __strong,
            NSURLResponse *_Nonnull __strong))block;

    Parameters

    block

    A block object to be executed when a data task has received a response. The block returns the disposition of the session response, and takes three arguments: the session, the data task, and the received response.

  • Sets a block to be executed when a data task has become a download task, as handled by the NSURLSessionDataDelegate method URLSession:dataTask:didBecomeDownloadTask:.

    Declaration

    Objective-C

    - (void)setDataTaskDidBecomeDownloadTaskBlock:
        (nullable void (^)(NSURLSession *_Nonnull __strong,
                           NSURLSessionDataTask *_Nonnull __strong,
                           NSURLSessionDownloadTask *_Nonnull __strong))block;

    Parameters

    block

    A block object to be executed when a data task has become a download task. The block has no return value, and takes three arguments: the session, the data task, and the download task it has become.

  • Sets a block to be executed when a data task receives data, as handled by the NSURLSessionDataDelegate method URLSession:dataTask:didReceiveData:.

    Declaration

    Objective-C

    - (void)setDataTaskDidReceiveDataBlock:
        (nullable void (^)(NSURLSession *_Nonnull __strong,
                           NSURLSessionDataTask *_Nonnull __strong,
                           NSData *_Nonnull __strong))block;

    Parameters

    block

    A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the session, the data task, and the data received. This block may be called multiple times, and will execute on the session manager operation queue.

  • Sets a block to be executed to determine the caching behavior of a data task, as handled by the NSURLSessionDataDelegate method URLSession:dataTask:willCacheResponse:completionHandler:.

    Declaration

    Objective-C

    - (void)setDataTaskWillCacheResponseBlock:
        (nullable NSCachedURLResponse *_Nonnull (^)(
            NSURLSession *_Nonnull __strong,
            NSURLSessionDataTask *_Nonnull __strong,
            NSCachedURLResponse *_Nonnull __strong))block;

    Parameters

    block

    A block object to be executed to determine the caching behavior of a data task. The block returns the response to cache, and takes three arguments: the session, the data task, and the proposed cached URL response.

  • Sets a block to be executed once all messages enqueued for a session have been delivered, as handled by the NSURLSessionDataDelegate method URLSessionDidFinishEventsForBackgroundURLSession:.

    Declaration

    Objective-C

    - (void)setDidFinishEventsForBackgroundURLSessionBlock:
        (nullable void (^)(NSURLSession *_Nonnull __strong))block;

    Parameters

    block

    A block object to be executed once all messages enqueued for a session have been delivered. The block has no return value and takes a single argument: the session.

Setting Download Task Delegate Callbacks

  • Sets a block to be executed when a download task has completed a download, as handled by the NSURLSessionDownloadDelegate method URLSession:downloadTask:didFinishDownloadingToURL:.

    Declaration

    Objective-C

    - (void)setDownloadTaskDidFinishDownloadingBlock:
        (nullable NSURL *_Nullable (^)(NSURLSession *_Nonnull __strong,
                                       NSURLSessionDownloadTask *_Nonnull __strong,
                                       NSURL *_Nonnull __strong))block;

    Parameters

    block

    A block object to be executed when a download task has completed. The block returns the URL the download should be moved to, and takes three arguments: the session, the download task, and the temporary location of the downloaded file. If the file manager encounters an error while attempting to move the temporary file to the destination, an FWURLSessionDownloadTaskDidFailToMoveFileNotification will be posted, with the download task as its object, and the user info of the error.

  • Sets a block to be executed periodically to track download progress, as handled by the NSURLSessionDownloadDelegate method URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:.

    Declaration

    Objective-C

    - (void)setDownloadTaskDidWriteDataBlock:
        (nullable void (^)(NSURLSession *_Nonnull __strong,
                           NSURLSessionDownloadTask *_Nonnull __strong, int64_t,
                           int64_t, int64_t))block;

    Parameters

    block

    A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes five arguments: the session, the download task, the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the NSHTTPURLResponse object. This block may be called multiple times, and will execute on the session manager operation queue.

  • Sets a block to be executed when a download task has been resumed, as handled by the NSURLSessionDownloadDelegate method URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:.

    Declaration

    Objective-C

    - (void)setDownloadTaskDidResumeBlock:
        (nullable void (^)(NSURLSession *_Nonnull __strong,
                           NSURLSessionDownloadTask *_Nonnull __strong, int64_t,
                           int64_t))block;

    Parameters

    block

    A block object to be executed when a download task has been resumed. The block has no return value and takes four arguments: the session, the download task, the file offset of the resumed download, and the total number of bytes expected to be downloaded.