2014-05-23 60 views
6

當iOS應用程序處於後臺時,真的沒有辦法運行UPLOAD任務嗎?這是荒唐的。一直在尋找各種東西,如NSURLSessionUploadTask,dispatch_after甚至NSTimer,但沒有任何作品超過應用程序居住在背景後居住的微薄的10秒。iOS:在應用程序處於後臺時執行上傳任務

上傳的其他應用程序如何工作?說,上傳圖片到Facebook並將應用程序置於後臺,將取消上傳?

爲什麼iOS不能擁有後臺服務或Android和Windows Phone等代理?

這是我的應用程序的一個重要功能,在其他平臺上完美地工作。

任何幫助表示讚賞:(

+0

這似乎是使用服務器端編程,如果你要成爲可能能夠創建並調用Web服務爲您完成任務。檢查鏈接:http://stackoverflow.com/questions/25725811/upload-image-video-to-facebook-asynchronously-using-php-sdk-4。不確定,如果它與你無關。 –

回答

6

您可以繼續上傳與iOS的背景7+如果使用[NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:]的配置,當你實例化NSURLSession

注:

  • 你必須使用基於代表NSURLSession;

  • 你不能使用completionHandler任務工廠方法與後臺會話的再現;和

  • 您還必須使用uploadTaskWithRequest:fromFile:方法,而不是NSData呈現。

  • 您的應用程序代理必須實現application:handleEventsForBackgroundURLSession:completionHandler:和捕捉完成處理,然後您可以在您的NSURLSessionDelegate方法URLSessionDidFinishEventsForBackgroundURLSession:調用。


順便說一句,如果你不想使用背景NSURLSession,但你要繼續運行一個有限長度的任務超過幾秒鐘的應用葉背景後,就可以用UIApplication方法beginBackgroundTaskWithExpirationHandler請求更多時間。這會給你幾分鐘的時間來完成你正在做的任何工作。請參閱清單3-3在iOS應用程序編程指南的App States and Multitasking部分的背景部分執行一個有限長度的任務:

UIApplication *application = [UIApplication defaultApplication]; 

bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ 
    // Clean up any unfinished task business by marking where you 
    // stopped or ending the task outright. 
    [application endBackgroundTask:bgTask]; 
    bgTask = UIBackgroundTaskInvalid; 
}]; 

// Start the long-running task and return immediately. 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

    // Do the work associated with the task, preferably in chunks. 

    [application endBackgroundTask:bgTask]; 
    bgTask = UIBackgroundTaskInvalid; 
}); 
+0

你確定關於'completionHandler'嗎?我沒有在'uploadTaskWithRequest:fromFile:completionHandler:'方法文檔中發現任何提及它不能用於後臺上傳任務。 – mrvincenzo

+0

請參閱[URLSession]的文檔(https://developer.apple.com/reference/foundation/urlsession),其中說:「因爲您的應用程序可能退出並在傳輸過程中重新啓動,完成處理程序塊不是支持的。」 – Rob

+0

非常感謝,Rob! – mrvincenzo

相關問題