2012-06-11 18 views
7

Sto tentando di caricare video utilizzando un codice di esempio di youtube api. Quando preme il pulsante di caricamento, la barra di avanzamento termina il suo processo, ma una volta quando raggiunge la fine del punto ottengo un errore. Descrizione dell'errore è la seguente:Autenticazione API Youtube - Iphone

YouTubeTest [2149: F803]. errore - Errore Domain = Codice com.google.GDataServiceDomain = 400 "L'operazione potrebbe non essere completata (errore com.google.GDataServiceDomain 400 .)" UserInfo = 0x69d5bd0 {}

Questo è il codice per il pulsante di caricamento premuto

- (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]; 

} 

ho creato chiave sviluppatore e chiave del client in modo corretto da API Cruscotto.

Sto eseguendo questo sul simulatore. È possibile non caricare video dal simulatore?

Per favore guidami dove sto andando male?

+0

Un errore 400 indica comunemente una richiesta errata. Vorrei controllare tutto il codice, l'autenticazione di accesso e, se possibile, testare il dispositivo per escludere eventuali problemi che il simulatore potrebbe causare. – Luke

+0

@Luke L'ho controllato anche sul dispositivo. Non funziona neanche lì .. Dando lo stesso errore :( – innodeasapps

+0

Hai qualche codice di esempio o link quindi per favore condividi. Ho ottenuto campioni per MAC OS X ma bot per iOS. – Imran

risposta

3

errore risolto ... Quando si utilizza un account Google per caricare video su YouTube, alcune funzioni del GData Objective-C richiedono l'account Gmail come parametro e alcuni richiedono l' YouTube collegato conto come parametro.

Quando si chiama '- (void) setUserCredentialsWithUsername: (NSString *) nome utente password: (NSString *) password;' in GDataServiceBase, il nome utente deve essere l'account Gmail, ad esempio 'x ... @ gmail.com' e la password deve essere la password dell'account Gmail .

Ma quando si chiama '+ (NSURL *) youTubeUploadURLForUserID: (NSString *) ID clientIDID: (NSString *) clientID;' in GDataServiceGoogleYouTube, il parametro userID deve essere l'account collegato YouTube e la password la password dell'account Gmail.

Stavo usando [email protected] per accedere dove ora sto usando solo email_id per accedere. Che errore stupido! .. Ma mi ci sono voluti 2 giorni interi per risolvere .. Duhhh .. !!