2012-06-11 14 views
7

youtube apiのサンプルコードを使用して動画をアップロードしようとしています。 アップロードボタンを押すとプログレスバーが終了しますが、一度終了するとエラーが発生します。YouTube API認証 - Iphone

YouTubeTest [2149:F803以下のようにエラーの説明である。エラー - エラーを ドメイン= com.google.GDataServiceDomainコード= 400「操作が が完了できなかった(com.google.GDataServiceDomainエラー400 。)」 のUserInfo = 0x69d5bd0 {}

これは、アップロードボタンのコードで、私はAPIから正しく開発者キーとクライアントキーを設定している

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

} 

を押しますダッシュボード。

私はこれをシミュレータで実行しています。私たちはシミュレータからビデオをアップロードできないのですか?

私は間違っていますか?

+0

400エラーは、通常、不正なリクエストを意味します。私はすべてのコード、ログイン認証、可能であれば、シミュレータが引き起こしている可能性のある問題を排除するためにデバイスをテストします。 – Luke

+0

@ルーク私はそれもデバイスでチェックしました。同じエラーが表示される:( – innodeasapps

+0

サンプルコードやリンクがありましたら、share.IにはMAC OS X用のサンプルがありますが、iOS用のボットはありますか? – Imran

答えて

3

エラーが解決しよう... YouTubeに動画をアップロードするには、Googleアカウントを使用して、GDataの のObjective-Cの一部の機能はパラメータとしてGmailアカウントを必要とし、いくつかは、YouTubeがパラメータとしてアカウントをリンクさ が必要です。

' - (void)setUserCredentialsWithUsername:(NSString *) username password:(NSString *)password;'を呼び出すと、 GDataServiceBaseでは、 ユーザー名はGmailアカウント(たとえば、 'x ... @ gmail.com')であり、パスワードは Gmailアカウントのパスワードである必要があります。

しかし、 '+(NSURL *)youTubeUploadURLForUserID:(NSString *) userID clientID:(NSString *)clientID;'を呼び出すと、 GDataServiceGoogleYouTubeで のuserIDパラメータはYouTubeリンクアカウントで、 パスワードはGmailアカウントのパスワードです。

私は[email protected]を使用してログインしていましたが、今はログインするのにemail_idを使用しています。愚かなエラー!..しかし、解決するのに2日かかりました.. Duhhh .. !!