 <p>I successfully round-trip a vanilla <code>http</code> call during a background task's callback, in production code. The <a href="https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSessionTaskDelegate_protocol/Reference/Reference.html#//apple_ref/occ/intfm/NSURLSessionTaskDelegate/URLSession%3atask%3adidCompleteWithError%3a" rel="nofollow">callback</a> is:</p> <pre><code>-[id&lt;NSURLSessionTaskDelegate&gt; URLSession:task:didCompleteWithError:] </code></pre> <p>You get about 30 seconds there to do what you need to do. <em>Any</em> async calls made during that time must be bracketed by </p> <pre><code>-[UIApplication beginBackgroundTaskWithName:expirationHandler:] </code></pre> <p>and the "end task" version of <a href="https://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instm/UIApplication/beginBackgroundTaskWithName%3aexpirationHandler%3a" rel="nofollow">that</a>. Otherwise, iOS will kill your process when you pop the stack (while you are waiting for your async process). </p> <p>BTW, don't confuse <code>UIApplication</code> tasks (I call them "app tasks") and <code>NSURLSession</code> tasks ("session tasks").</p>