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

У меня есть ветвь загрузки видео в моей вилке 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-документов! Это причудливо не связано нигде, мне нужно было кое-что сделать …

  • Ошибка AdMob с помощью : непризнанный селектор
  • Проблема автосохранения кадра UICollectionViewCell contentView в ячейке прототипа Storyboard (Xcode 6, iOS 8 SDK) происходит при запуске только на iOS 7
  • UIImage от CALayer - iPhone SDK
  • Звук не работает в iPhone Simulator?
  • всплывающее меню iPhone, как iPad popover?
  • Пользовательский интерфейс UINavigationBar
  • Метод Swizzle на устройстве iPhone
  • Почему я не должен использовать Objective C 2.0-аксессоры в init / dealloc?
  • target переопределяет настройки FRAMEWORK_SEARCH_PATHS
  • Как проверить программно, если приложение установлено?
  • Есть ли способ подавить предупреждения в Xcode?
  • Interesting Posts

    Как отключить элементы в представлении списка?

    shouldOverrideUrlLoading в WebView для Android не работает

    SelectListItem с атрибутами данных

    Масштабируйте ImageIcon автоматически до размера метки

    Автоматическая конфигурация конфигурации отсутствующего типа или неподдерживаемое отображение?

    Изменить целевой код C # DllImport в зависимости от x64 / x86

    Ясное, непрофессиональное объяснение разницы между | и || в c #?

    Разница между краской, paintComponent и paintComponents в Swing

    Объявление переменной внутри или вне цикла foreach: что быстрее / лучше?

    Эффективное квантование цвета gif / изображения?

    Существуют ли какие-либо тесты, показывающие разницу между включенной / отключенной аппаратной виртуализацией?

    Как найти трассировку стека в Visual Studio?

    Есть ли веская причина для обеспечения максимальной ширины 80 символов в файле кода, в этот день и в возрасте?

    Как выполнить требования к 20 ГБ для Windows 8 на SSD емкостью 40 ГБ с установкой Windows 7 с диагональю 22 ГБ?

    Интервью: Можем ли мы создать абстрактный class?

    Давайте будем гением компьютера.