Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Download multiple files using iOS background transfer service

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.

like image 729
dariaa Avatar asked Apr 03 '14 15:04

dariaa


People also ask

Can iOS apps download in background?

In iOS, your app could be in the foreground, suspended, or even terminated by the system. See Managing your app's life cycle for more information about these states. If your app is in the background, the system may suspend your app while the download is performed in another process.

What is downloading in the background iPhone?

Check in Settings>iTunes & App Store>Automatic Downloads>Updates>On. If that is set to "On", any apps that require updates are being downloaded in the background.


2 Answers

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.

like image 135
Andrey Avatar answered Oct 19 '22 12:10

Andrey


From a perspective of this tutorial here (http://www.appcoda.com/background-transfer-service-ios7/) it looks like you have to start the download of those two files simultaneously. As you have a configuration for the maximum connections per host in a session, I guess you can limit the parallel downloads to 1, and just kick off both downloads.

I am currently trying to port this to MonoTouch ... seems promising ...

like image 35
SimonSimCity Avatar answered Oct 19 '22 13:10

SimonSimCity