2014-02-21 2 views
2

사용자가 초기에 장치에 저장된 이미지 및 비디오를 가져올 수있는 앱 개발 중입니다. 기기가 네트워크 (모바일 데이터 또는 Wi-Fi)에 연결될 때마다 서버에 업로드해야합니다.NSURLSession을 사용하여 네트워크 연결 대 백그라운드 업로드

이제 NSURLSessionUploadTask을 사용하면 데이터도 백그라운드로 업로드되지만 네트워크가 없으면 -didCompleteWithError: 대리인에게 콜백이 전송되어 이제 작업이 끝납니다. 이제 장치에 네트워크 연결이있을 때 작업을 다시 시작할 수 있습니다.

내가 도달 가능성을 확인하고 기기에 도달 할 수 있는지 확인하고 싶습니다. 업로드 작업을 시작하십시오.

내가 생각할 수있는 한 가지 방법은 배경 가져 오기을 가져오고 연결을 감지하고 업로드 작업을 예약합니다.

이것은 엔터프라이즈 앱이므로 승인이 필요하지 않습니다.

다음

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 (@ "오류 % @", 오류);)? –

+0

@ClayBridges 늦게 답변을 드려 죄송합니다. 업로드 작업을 만들기 위해 코드를 추가했습니다. 그러나이 대리자는 결코 콜백을받지 못합니다 - (void) URLSessionDidFinishEventsForBackgroundURLSession : (NSURLSession *) session – awasthinitin10

답변

0

귀하의 배경 업로드 네트워크 괴짜를 통해 작동합니다 코드입니다. 업로드 중 하나에 대한 오류 상태가 -didCompleteWithError: 인 경우 동일한 업로드를 다시 대기시켜야합니다. 이 작업을 수행 할 때 네트워크에 연결되어 있더라도 OS는 업로드 할 수있을 때 업로드를 처리해야합니다.

연결되면서 배경 가져 오기가 시작되지만 연결되어 있고 Wi-Fi는 좋은 시작입니다. 가져 오기 콜백이 발생할 때 반드시 연결해야합니다. 가져 오기 콜백 중에 백그라운드 업로드 작업을 큐에 넣을 수 있어야합니다.

또한 새 네트워크가 감지되거나 셀 타워가 전환 될 때마다 알리도록 백그라운드 지오 펜싱의 "라이트"버전을 등록 할 수 있습니다. Cf. -[CLLocationManager startMonitoringSignificantLocationChanges].

관련 문제