2014-02-21 56 views
2

我正在開發應用程序,允許用戶拍攝最初保存在設備中的圖像和視頻。只要設備連接到網絡(移動數據或無線網絡),就需要將這些設備上載到服務器。使用NSURLSession進行網絡連接與背景上傳

現在如果我使用NSURLSessionUploadTask,數據也會在後臺上傳,但是如果沒有網絡,我會在-didCompleteWithError:委託處收到回調,現在任務結束。現在,如何在設備連接網絡時恢復任務。

我想做一些檢查可達性和設備是否可訪問開始上傳任務。

我能想到的一種方法是使用Background Fetch來檢測連接和時間表上傳任務。

這將是一個企業應用程序,所以不需要批准。

以下是代碼

NSURLSessionConfiguration *config = [NSURLSessionConfiguration   
backgroundSessionConfiguration:@"background" ]; 

NSURLSession *upLoadSession = [NSURLSession sessionWithConfiguration:config delegate:self  
delegateQueue:[NSOperationQueue mainQueue]]; 
NSURL *url = [NSURL URLWithString:@"http://www.t9l.com/rest/test/httprawdata"];  
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
[request setHTTPMethod:@"POST"]; 
NSString* [email protected]"nitin=asd"; 
[request setHTTPBody:[str dataUsingEncoding:NSUTF8StringEncoding]]; 

self.uploadTask = [upLoadSession uploadTaskWithRequest:request fromFile:filePath] ; 

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 

[self.uploadTask resume]; 
+0

當你失去網絡時,你確定會得到'-didCompleteWithError:'嗎?你能發佈你得到的東西嗎(例如'NSLog(@「error%@」,error);')? –

+0

@ClayBridges對不起,回覆遲了。我已經添加了我的代碼來創建上傳任務。但是這個委託永遠不會收到回調 - (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session – awasthinitin10

回答

0

你的後臺上傳應該通過網絡片狀工作。如果您在-didCompleteWithError:中發現其中一個上傳的錯誤狀態,則可以再次對同一上傳進行排隊。當你這樣做時,如果你在網絡上並不重要,操作系統應該在可以/想要的時候處理上傳。

背景取來的時候談到,雖然插入的和-WiFi的好踢附加賽。當獲取回調發生時,你肯定會有一些連接。您應該能夠在獲取回調期間對後臺上傳任務進行排隊。

你也可以註冊了「精簡版」的版本背景地理界線的,只要檢測到新的網絡或手機信號塔的開關,從而將後臺通知您。參看-[CLLocationManager startMonitoringSignificantLocationChanges]