2013-11-28 1 views
0

iOS 초보자, google 목표 c api를 사용하여 YouTube에 비디오를 업로드하려고합니다. 대부분의 경우 작동합니다. 동영상을 업로드 할 수 있으며 콜백은 오류가 발생하면 오류를받습니다.Google 목표 c api : 인터넷 연결이 없을 때 completionHandler가 호출되지 않음

그러나 장치의 인터넷 연결을 해제하면 콜백이 호출되지 않습니다. (잘못된 제목이나 잘못된 태그와 같은 다른 유형의 오류가 있다고하더라도)

GTLServiceYouTube에 대한 콜백을 설정하는 동안 GTMOAuth2Authentication에 대한 콜백을 명시 적으로 설정하지 않았으므로 전화. 그러나 나는 어떻게 하나를 세우는 지 잘 모르겠다.

내 경우에는 사용자가 자격 증명을 입력하지 않아도 동영상을 업로드 할 수 있어야하므로 GTMOAuth2Authentication을 수동으로 초기화해야합니다.

여기 내 코드입니다. 제가 잘못하고있는 부분을 수정하고 어떻게 해결할 수 있는지 알려주세요.

NSString *clientID = @"185815387242-hqo2d4e06j4hk4f02t5gvn7jcifakdvr.apps.googleusercontent.com"; 
    NSString *clientSecret = @"2LKi7orHyphJXXXXXXXXXXXX"; 
    NSURL *tokenURL = [NSURL URLWithString:@"https://accounts.google.com/o/oauth2/token"]; 
    NSString *redirectURI = @"urn:ietf:wg:oauth:2.0:oob"; 


    GTMOAuth2Authentication *auth; 
    auth = [GTMOAuth2Authentication authenticationWithServiceProvider:kGTMOAuth2ServiceProviderGoogle 
             tokenURL:tokenURL 
             redirectURI:redirectURI 
             clientID:clientID 
             clientSecret:clientSecret]; 


    [auth setKeysForResponseString:@"email=annonce-video-i-6620%40pages.plusgoogle.com&isVerified=1&refresh_token=1%2FFFo5rlNs51u9g2TpCIE2oji_ACvDPc0XXXXXXXXXXXX&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&serviceProvider=Google&userID=107586507912247324352"]; 
    ////////////////////////////////////////////////// 

    GTLServiceYouTube *youTubeService = [[GTLServiceYouTube alloc] init]; 

    // Have the service object set tickets to fetch consecutive pages 
    // of the feed so we do not need to manually fetch them. 
    youTubeService.shouldFetchNextPages = YES; 

    // Have the service object set tickets to retry temporary error conditions 
    // automatically. 
    youTubeService.retryEnabled = YES; 

    youTubeService.authorizer = auth; 

    // Status. 
    GTLYouTubeVideoStatus *status = [GTLYouTubeVideoStatus object]; 

    // Snippet. 
    GTLYouTubeVideoSnippet *snippet = [GTLYouTubeVideoSnippet object]; 
    snippet.title = @"TITLE"; 
    NSString *desc = @"DESC"; 
    if ([desc length] > 0) { 
     snippet.descriptionProperty = desc; 
    } 
    NSString *tagsStr = @"TAGS"; 
    if ([tagsStr length] > 0) { 
     snippet.tags = [tagsStr componentsSeparatedByString:@","]; 
    } 

    GTLYouTubeVideo *video = [GTLYouTubeVideo object]; 
    video.status = status; 
    video.snippet = snippet; 

    // Get a file handle for the upload data. 
    NSString *path = @"AVALIDPATH"; 
    NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:path]; 
    if (fileHandle) { 
     NSString *mimeType = @"video/mp4"; 
     GTLUploadParameters *uploadParameters = 
     [GTLUploadParameters uploadParametersWithFileHandle:fileHandle 
                MIMEType:mimeType]; 
     uploadParameters.uploadLocationURL = nil; 

     GTLQueryYouTube *query = [GTLQueryYouTube queryForVideosInsertWithObject:video 
                      part:@"snippet,status" 
                   uploadParameters:uploadParameters]; 




     GTLServiceYouTube *service = youTubeService; 
     [service executeQuery:query 
       completionHandler:^(GTLServiceTicket *ticket, 
            GTLYouTubeVideo *uploadedVideo, 
            NSError *error) { 
         //NEVER CALLED WHEN THE DEVICE IS IN AIRPLANE MODE 
         NSLog(@"And call me maybe."); 
                }]; 

나는 음 ... 동기화 된 블록을 한 번 GTMOAuth2Authentication 콜백 및 호출 할 두 번째 전화를 두 번 호출 969

@synchronized(self) { 
    target = [[delegate_ retain] autorelease]; 
    sel = finishedSel_; 
#if NS_BLOCKS_AVAILABLE 
    block = [[completionBlock_ retain] autorelease]; 
#endif 
    } 

GTMHTTPFetcher 라인에 호출의 부재를 다시 추적했다 ... nil

답변

0

업로드시 재 시도 처리의 버그는 라이브러리에서 recently fixed입니다. Google API 라이브러리 소스를 업데이트 해보십시오.

+0

음 ... 슬프게도 버그가 여전히 있습니다. 인터넷에 연결되어 있지 않으면 콜백이 호출되지 않습니다. bugtracker 또는 다른 것에 이것을 추가해야합니까? – Taiko