2012-06-11 16 views
7

Próbuję przesłać wideo, korzystając z przykładowego kodu interfejsu API serwisu youtube. Po naciśnięciu przycisku przesyłania, pasek postępu kończy się, ale raz, gdy dojdzie do końca punktu, pojawia się błąd. opis błędu jest następujący:Uwierzytelnianie API Youtube - Iphone

YouTubeTest [2149]: f803. błędu - błąd domeny = kod com.google.GDataServiceDomain = 400 „Operacja nie może zostać zakończona (błąd com.google.GDataServiceDomain 400).” UserInfo = 0x69d5bd0 {}

jest to kod dla przycisku wysyłania wciśnięty

- (IBAction)uploadPressed:(id)sender { 
    [self.view resignFirstResponder]; 
    NSString *devKey = [mDeveloperKeyField text]; 

    GDataServiceGoogleYouTube *service = [self youTubeService]; 
    [service setYouTubeDeveloperKey:devKey]; 

    NSString *username = [mUsernameField text]; 
    NSString *clientID = [mClientIDField text]; 

    NSURL *url = [GDataServiceGoogleYouTube youTubeUploadURLForUserID:username 
                  clientID:clientID]; 

    // load the file data 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"YouTubeTest" ofType:@"m4v"]; 
    NSData *data = [NSData dataWithContentsOfFile:path]; 
    NSString *filename = [path lastPathComponent]; 

    // gather all the metadata needed for the mediaGroup 
    NSString *titleStr = [mTitleField text]; 
    GDataMediaTitle *title = [GDataMediaTitle textConstructWithString:titleStr]; 

    NSString *categoryStr = [mCategoryField text]; 
    GDataMediaCategory *category = [GDataMediaCategory mediaCategoryWithString:categoryStr]; 
    [category setScheme:kGDataSchemeYouTubeCategory]; 

    NSString *descStr = [mDescriptionField text]; 
    GDataMediaDescription *desc = [GDataMediaDescription textConstructWithString:descStr]; 

    NSString *keywordsStr = [mKeywordsField text]; 
    GDataMediaKeywords *keywords = [GDataMediaKeywords keywordsWithString:keywordsStr]; 

    BOOL isPrivate = mIsPrivate; 

    GDataYouTubeMediaGroup *mediaGroup = [GDataYouTubeMediaGroup mediaGroup]; 
    [mediaGroup setMediaTitle:title]; 
    [mediaGroup setMediaDescription:desc]; 
    [mediaGroup addMediaCategory:category]; 
    [mediaGroup setMediaKeywords:keywords]; 
    [mediaGroup setIsPrivate:isPrivate]; 

    NSString *mimeType = [GDataUtilities MIMETypeForFileAtPath:path 
               defaultMIMEType:@"video/mp4"]; 

    // create the upload entry with the mediaGroup and the file data 
    GDataEntryYouTubeUpload *entry; 
    entry = [GDataEntryYouTubeUpload uploadEntryWithMediaGroup:mediaGroup 
                  data:data 
                 MIMEType:mimeType 
                  slug:filename]; 

    SEL progressSel = @selector(ticket:hasDeliveredByteCount:ofTotalByteCount:); 
    [service setServiceUploadProgressSelector:progressSel]; 

    GDataServiceTicket *ticket; 
    ticket = [service fetchEntryByInsertingEntry:entry 
             forFeedURL:url 
             delegate:self 
           didFinishSelector:@selector(uploadTicket:finishedWithEntry:error:)]; 

    [self setUploadTicket:ticket]; 

} 

mam skonfigurować klucz dewelopera i klucz klienta poprawnie z API Deska rozdzielcza.

Używam tego na symulatorze. Czy nie możemy przesyłać filmów z symulatora?

Proszę wskazać mi, gdzie się mylę?

+0

Błąd 400 często oznacza złą prośbę. Sprawdziłbym cały twój kod, uwierzytelnienie logowania i jeśli to możliwe, przetestuj na urządzeniu, aby wykluczyć wszelkie możliwe problemy, które może powodować symulator. – Luke

+0

@ Luke Sprawdziłem to również na urządzeniu. To też nie działa ... Podając ten sam błąd :( – innodeasapps

+0

Masz jakiś przykładowy kod lub link, proszę podziel się. Mam próbki dla MAC OS X, ale bota dla iOS. – Imran

Odpowiedz

3

Błąd Solved ... Przy użyciu konta Google, aby przesłać film do YouTube, niektóre funkcje GData Objective-C wymagają konta Gmail jako parametr, a niektóre wymagają powiązane konto YouTube jako parametr.

Po wywołaniu "- (void) setUserCredentialsWithUsername: (NSString *) nazwa użytkownika hasło: (NSString *) hasło; ' w GDataServiceBase nazwa użytkownika powinna być kontem Gmail, na przykład "x ... @ gmail.com", a hasło powinno być hasłem konta Gmail .

Ale kiedy zadzwonisz "+ (NSURL *) youTubeUploadURLForUserID: (NSString *) ID klienta ID klienta: (NSString *) clientID; ' w GDataServiceGoogleYouTube, parametrem userID powinno być konto połączone z YouTube, a hasło do konta Gmail.

Używałem adresu [email protected] do logowania, gdzie teraz używam adresu email_id, aby się zalogować. Co za głupi błąd! .. Ale zajęło mi to 2 pełne dni na rozwiązanie .. Duhhh .. !!