6

Objective-C 用の Google API クライアント ライブラリを使用して YouTube にビデオをアップロードしようとしています。以下のコードを使用していますが、このエラーが発生し続けています。ここでもう一度 YouTube サンプル プロジェクトでアカウントを実行しようとしましたが、同じ結果が得られました。エラー。

どこに問題があるのか​​ 教えてもらえますか?YouTube Data API v3 がサービス ページでオンになっていることを確認します。

*** Assertion failure in -[GTMHTTPUploadFetcher connectionDidFinishLoading:], /Volumes/data/Work/test/DLNew/DL/google-api-objectivec-client-read-only/Source/HTTPFetcher/GTMHTTPUploadFetcher.m:399
2013-08-30 14:28:31.399 [1250:907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unexpected response data (uploading to the wrong URL?)'

GTMHTTPUploadFetcher クラスのコードを確認すると、このリンクでアプリがクラッシュしています

`#if DEBUG
  // The initial response of the resumable upload protocol should have an
  // empty body
  //
  // This assert typically happens because the upload create/edit link URL was
  // not supplied with the request, and the server is thus expecting a non-
  // resumable request/response.
  NSAssert([[self downloadedData] length] == 0,
                    @"unexpected response data (uploading to the wrong URL?)");
 #endif

.

 NSString *path              = [[NSUserDefaults standardUserDefaults] objectForKey:@"MOVIEPATH"];
NSString *filename = [path lastPathComponent];
NSString *mimeType = [self MIMETypeForFilename:filename defaultMIMEType:@"video/mp4"];

NSError *eel=nil;

NSFileHandle *handle        = [NSFileHandle fileHandleForReadingFromURL:[NSURL URLWithString:path] error:&eel];
NSLog(@"error is  %@",eel);
if (!handle)
{
    NSLog(@"Failed to open file for reading");
    return;
}



GTLServiceYouTube *service      = [[GTLServiceYouTube alloc] init];
service.authorizer              = self.gTMOAuth2Authentication;

GTLUploadParameters *params     = [GTLUploadParameters uploadParametersWithFileHandle:handle MIMEType:mimeType];

GTLYouTubeVideoSnippet *snippet = [GTLYouTubeVideoSnippet object];
snippet.title                   = @"Test title";
snippet.descriptionProperty     = @"Test description";
snippet.tags                    = [NSArray arrayWithObjects:@"TestOne", @"TestTwo" ,nil];
snippet.categoryId              = @"17";

GTLYouTubeVideoStatus *status   = [GTLYouTubeVideoStatus object];
status.privacyStatus            = @"private";

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

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



// Perform the upload
GTLServiceTicket *ticket        = [service executeQuery:query completionHandler:^(GTLServiceTicket *ticket, id object, NSError *error)
{
    if (error)
    {
        NSLog(@"ERROR: %@", error);
        return;
    }

    NSLog(@"SUCCESS! %@; %@;", ticket, object);
}];

ticket.uploadProgressBlock = ^(GTLServiceTicket *ticket, unsigned long long numberOfBytesRead, unsigned long long dataLength)
{
    NSLog(@"%lld / %lld", numberOfBytesRead, dataLength);
};

----------

問題は、新しい Gmail アカウントからログインしていたため、YouTube サイトにログインする必要があり、動画を YouTube にアップロードする前にチャンネルを作成する必要があることでした。これで、YouTube チャンネルを作成した後に動画をアップロードできるようになりました。しかし、他のユーザーのためにこのシナリオをどのように処理できますか?

4

8 に答える 8

0

ここから見つけましたgoogle-youtube-api-v3-ios-app-key-403-error-code

基本的に、 a のKey for browser apps代わりに aを使用すると機能しKey for iOS appsます。

于 2013-12-06T03:34:07.213 に答える
0

APIサービスタブからDrive APIとDrive SDKを有効にする必要があると思います

プロジェクトのサービスをオンにして、もう一度やり直してください。

両方がオンになっている場合は、マニフェストで "api_console_project_id" : "xxxxxxxxxxxx" 引数が設定されていることを確認してください。

于 2013-09-11T06:29:17.937 に答える
0

誰かがこれに対する解決策をすでに見つけているかどうかはわかりませんが、アプリのクラッシュを回避するために私が (Swift で) 実装したものは次のとおりです。

まず、次を使用して Youtube チャンネルのステータスを確認します。

GTLQueryYouTube.queryForChannelsListWithPart一部を「ステータス」に設定

応答で「isLinked」パラメーターの値が 0 でない場合は、次を使用してのみ動画をアップロードします。

GTLQueryYouTube.queryForVideosInsertWithObject

それ以外の場合は、最初に YouTube チャンネルをリンクするようユーザーに依頼してください。

于 2016-03-10T12:54:17.417 に答える
0

ここで仮定をしている場合は申し訳ありませんが、私はあなたと同じエラーがあり、問題は実際には私のオーソライザーであることが判明しました. auth でエラーを処理していること、および auth を に適用していることを確認してくださいservice.authorizer

if (![self.youTubeAuth canAuthorize]) {
    // ...
}
service.authorizer = auth;

GTMOAuth2ViewControllerTouch 初期化子のスコープが間違っているため、この問題も発生していました。@""間違ったスコープよりも良い結果が得られます。YouTube サンプル アプリを確認してください。

于 2013-09-09T22:06:28.597 に答える
0

問題は、新しい Gmail アカウントからログインしていたため、YouTube サイトにログインする必要があり、動画を YouTube にアップロードする前にチャンネルを作成する必要があることでした。これで、YouTube チャンネルを作成した後に動画をアップロードできるようになりました。しかし、他のユーザーのためにこのシナリオをどのように処理できますか?

于 2013-12-11T07:27:39.837 に答える
-2

GTLServiceYouTube *youtube = [[GTLServiceYouTube alloc] init]; youtube.APIKey = @"-my-simple-api-access-key-"; //<-- 問題のある行 youtube.authorizer = [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName clientID:kYouTubeClientID clientSecret:kYouTubeClientSecret];

于 2016-09-07T10:03:52.400 に答える