iPhone Facebook Загрузка видео

Я работаю над этим уже пару дней и просто не могу найти прямой ответ или пример где угодно. Я пытаюсь загрузить видео в facebook из моего iPhone App. Я могу подключиться к facebook (и загрузить фотографии) без проблем, используя:

_facebook = [[Facebook alloc] initWithAppId:kAppID]; _permissions = [[NSArray arrayWithObjects:@"publish_stream", @"offline_access",nil] retain]; [_facebook authorize:_permissions delegate:self]; 

Однако я не могу заставить загружать видео. Мой текущий код:

 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"TestMovie" ofType:@"mp4"]; NSData *data = [NSData dataWithContentsOfFile:filePath]; NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: data, @"video", nil, @"callback", @"test", @"title", @"upload testing", @"description", @"EVERYONE", @"privacy", nil]; [_facebook requestWithMethodName:@"video.upload" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

А поскольку вызовы видеозагрузки должны быть сделаны на другом сервере, я изменил URL-адрес сервера restserver в файле facebook.m:

 static NSString* kRestserverBaseURL = @"https://api-video.facebook.com/method/"; 

Когда я запускаю это, загрузка вылетает с ошибкой:

 facebookErrDomain err 353. 

Любая помощь будет оценена по достоинству.

РЕДАКТИРОВАТЬ:

С помощью Zoul я теперь выполнил следующий код (я не сделал ничего, чтобы изменить его class загрузки и версию SDK, с которой он пришел). Запрос больше не получает ошибку, однако ничего не загружается.

Я инициализирую объект facebook и объект upload:

 _facebook = [[Facebook alloc] initWithAppId:kAppID]; _permissions = [NSArray arrayWithObjects:@"publish_stream", @"offline_access",nil]; [_facebook authorize:_permissions delegate:self]; _upload = [[FBVideoUpload alloc] init]; 

И затем я использую его, как только facebook выполнил вход:

 - (void)fbDidLogin{ _upload.accessToken = _facebook.accessToken; _upload.apiKey = kApiKey; _upload.appSecret = kApiSecret; NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"mp4"]; NSURL *fileURL = [NSURL fileURLWithPath:filePath]; NSData *data = [NSData dataWithContentsOfFile:filePath]; NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: data, @"", @"test", @"title", @"upload testing", @"description", @"EVERYONE", @"privacy", nil]; [_upload startUploadWithURL:fileURL params:params delegate:self]; } 

5 Solutions collect form web for “iPhone Facebook Загрузка видео”

У меня есть ветвь загрузки видео в моей вилке SDK для Facebook на GitHub. Я не касался его несколько недель, но он работал нормально (только для него требуется аутентификация в старом стиле, см. Эту ветку ). В заголовке classа FBVideoUpload есть несколько комментариев, но интерфейс почти не требует пояснений. Также есть полезная дискуссия по моему запросу – особенно о сертификатах SSL в кластере api-video которые могут облегчить задачу, но я еще не просмотрел код.

[Rant: Жаль, что SDK для Android для iOS точно не процветает на GitHub. Есть много запросов на тягу, но официальные разработчики никогда не сливаются ни с чем, даже тривиальные опечатки в документации. Большую часть времени запросы на тягу просто сидят там до отказа.]

И да, я упомянул, что код загрузки видео – грязный хак? Код загрузки видео – грязный хак. Он анализирует некоторые токены аутентификации, и это может сломаться в ближайшее время, но это был единственный способ, с помощью которого я мог бы заставить его работать тогда.


Обновление: больше не загружается ветвь загрузки видео, теперь вы можете легко загрузить видео с помощью официального SDK:

 NSData *videoData = [NSData dataWithContentsOfURL:movieURL]; NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: …, @"title", …, @"description", …, @"file", videoData, @"clip.mov", nil]; [facebook requestWithGraphPath:@"me/videos" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

Это «правильный способ сделать это» ™, предыдущее решение было всего лишь временным взломом.

Вы можете использовать новый график api для загрузки видео:

  • Использовать me / videos как путь к графику
  • Добавить разрешение user_videos для вашего приложения
  • Задайте имя файла в соответствии с расширением вашего файла в запросе POST (после Content-Disposition 🙂

Вы можете использовать эту вилку https://github.com/johnmph/facebook-ios-sdk и иметь такой словарь параметров:

 NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:movieData, @"source", @"File.mov", @"filename", nil]; [m_facebook requestWithGraphPath:@"me/videos" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

Я также добавил к этой вилке метод отслеживания состояния загрузки (например, для использования с индикатором выполнения)

 - (void)viewDidLoad { facebook = [[Facebook alloc] initWithAppId:@"276907032339239"]; } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // eg self.myOutlet = nil; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } - (IBAction)buttonClicked:(id)sender { NSArray* permissions = [[NSArray alloc] initWithObjects: @"publish_stream", nil]; [facebook authorize:permissions delegate:self]; [permissions release]; } - (void)fbDidLogin { NSString *filePath = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"mov"]; NSData *videoData = [NSData dataWithContentsOfFile:filePath]; NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: videoData, @"video.mov", @"video/quicktime", @"contentType", @"Video Test Title", @"title", @"Video Test Description", @"description", nil]; [facebook requestWithGraphPath:@"me/videos" andParams:params andHttpMethod:@"POST" andDelegate:self]; NSLog(@"hiiiiiiiii"); } -(void)fbDidNotLogin:(BOOL)cancelled { NSLog(@"did not login"); } - (void)request:(FBRequest *)request didLoad:(id)result { if ([result isKindOfClass:[NSArray class]]) { result = [result objectAtIndex:0]; } NSLog(@"Result of API call: %@", result); } - (void)request:(FBRequest *)request didFailWithError:(NSError *)error { NSLog(@"Failed with error: %@", [error localizedDescription]); } 

Попробовали ли вы отправить его по электронной почте в качестве facebook, написанной по адресу http://www.facebook.com/help/?faq=12345. Вы можете использовать тему электронной почты для установки заголовка видео.

На самом деле все, стоит упомянуть, чтобы следить за различными техническими блогами Facebook. Это датировано октябрем 2011 года, поэтому нет «текущего» SDK: http://developers.facebook.com/blog/post/532/

Но образец все еще работает, если вы изменяете идентификатор пакета, добавляете схему URL-адреса в plist и добавляете свой собственный идентификатор приложения в controller вида:

введите описание изображения здесь

Это самая полезная информация, которую я нашел при загрузке видео. Я не знаю, почему Facebook скрывает это от своих основных SDK-документов! Это причудливо не связано нигде, мне нужно было кое-что сделать …

  • Как проспать от сна программно, если крышка закрыта?
  • NSDateFormatter dateFromString возвращает nil
  • Нарисуйте часть круга
  • Проблема UITableView при использовании отдельного делегата / источника данных
  • Подчеркивать префикс имени свойства?
  • iPhone - Что такое reuseIdentifiers (UITableViewCell)?
  • Значение предупреждения "во время презентации!"
  • Как написать таймер в Objective-C?
  • Звук не работает в iPhone Simulator?
  • Изменение позиции UIBarButtonItem в UINavigationBar
  • Передача параметров addTarget: действие: forControlEvents
  • Interesting Posts
    Давайте будем гением компьютера.