Download multiple files using iOS background transfer service

dariaa picture dariaa · Apr 3, 2014 · Viewed 7.1k times · Source

Here is the question: how to download a number of files one by one using the new Background Transfer Service (including the case when the app is suspended)? I read this awesome tutorial on objc.io and got it working for one file. But I need to download files one by one (so adding multiple NSURLSessionDownloadTaskss will not work (since download URLs are only valid for a short amount of time)

Basically what I am trying to do is to schedule another download once the app is notified that the previous download finished in application:handleEventsForBackgroundURLSession:completionHandler:. But I only get this method invoked once. Any idea why? Any advice on how to implement sequential downloads for multiple files when the app is suspended is appreciated.

UPDATE:

Sorry, I probably was not clear about what the actual problem is: it's not that I do not get notified about the task completion in general, it's that I do not have application:handleEventsForBackgroundURLSession:completionHandler: called for the second download task when the app is running in the backgorund. I do get it invoked for the first download task (which started while the app was in the foreground and then went to background before the download finished) then I fire the second download task, call the completionHandler I got in application:handleEventsForBackgroundURLSession:completionHandler: and never have this method invoked for the second file.

Answer

Andrey picture Andrey · Apr 3, 2014

I would suggest adding next file in NSURLSessionTaskDelegate's - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error. This method is called whenever previous task completes, so looks like a reasonable choice to enqueue next file.