アプリで Google API の Objective-C クライアントを使用して YouTube API v3 を追加し、動画を YouTube にアップロードしました。アプリのテスター (別の国) は、動画を YouTube にアップロードできないと報告しています。進行状況が 100% に達した後、ビデオのアップロードがバックエンド エラーで失敗します。ここインドでは、私はその問題に直面していません。また、テスターは、YouTube ios アプリまたは別のアプリを使用してアップロードした場合、YouTube 動画のアップロードが正常に機能することを確認しています。また、複数のアカウントから動画をアップロードしようとしましたが、結果は同じでした。
デバイス コンソールからのエラー ログは次のとおりです。
Error Domain=com.google.GTLJSONRPCErrorDomain Code=-32099 "The operation couldn’t be completed. (Backend Error)" UserInfo=0x2438c380 {error=Backend Error, GTLStructuredError=GTLErrorObject 0x27ea3990: {message:"Backend Error" code:-32099 data:[1]}, NSLocalizedFailureReason=(Backend Error)}
YouTubeにビデオをアップロードするために使用しているコードは次のとおりです。
GTMOAuth2Authentication *auth = [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:YoutubeOAuthKeyChain clientID:GoogleAPIClientID clientSecret:GoogleAPIClientSecret];
if (!auth) {
[self signInToGoogle];
}else{
if ([auth canAuthorize] && auth.userEmail) {
//Force the api to refresh access token if needed
[auth authorizeRequest:Nil completionHandler:^(NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (!error) {
NSLog(@"Youtube: App authorized. Uploading video now");
self.youTubeService.authorizer = auth;
GTLYouTubeVideoStatus *status = [GTLYouTubeVideoStatus object];
status.privacyStatus = @"public";
GTLYouTubeVideoSnippet *snippet = [GTLYouTubeVideoSnippet object];
snippet.title = _captionTextView.text;
snippet.descriptionProperty = @"This is a test video";
GTLYouTubeVideo *video = [GTLYouTubeVideo object];
video.status = status;
video.snippet = snippet;
NSString *filename = [_moviePath lastPathComponent];
NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:_moviePath];
if (fileHandle) {
NSString *mimeType = [self MIMETypeForFilename:filename
defaultMIMEType:@"video/mp4"];
GTLUploadParameters *uploadParameters = [GTLUploadParameters uploadParametersWithFileHandle:fileHandle MIMEType:mimeType];
uploadParameters.uploadLocationURL = nil;
//uploadParameters.shouldSendUploadOnly = YES;
GTLQueryYouTube *query = [GTLQueryYouTube queryForVideosInsertWithObject:video part:@"snippet,status" uploadParameters:uploadParameters];
GTLServiceYouTube *service = self.youTubeService;
GTLServiceTicket *ticket = [service executeQuery:query completionHandler:^(GTLServiceTicket *ticket, id object, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (!error) {
NSLog(@"Youtube video upload completed ");
}else{
NSLog(@"error completing request with error: %@", error);
}
});
}];
[ticket setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long totalBytesWritten, unsigned long long totalBytesExpectedToWrite) {
float progress = ((float)totalBytesWritten / (float)totalBytesExpectedToWrite) * 100.0f;
NSLog(@"%f %% uploaded");
}];
}
}else{
//Error authorizing the request
NSLog(@"error authorizing request with error: %@", error);
}
});
}];
}else{
//Refresh access token
[self signInToGoogle];
}
}
この問題はちょうど 2 週間前に始まりました。これが私のアプリの問題のサーバー側の問題であるかどうかはわかりません。誰も同じ問題を抱えていますか?