Facebook iOS Загрузить видео "Невозможно получить ключ сеанса с токена доступа." - PullRequest
1 голос
/ 05 апреля 2011

Я хочу загрузить видео на Facebook с помощью ios-sdk

. Я проверяю обсуждаемое обсуждение Загрузка видео с iPhone на Facebook и пытаюсь реализовать его в своем приложении

Iпопробуйте ваш код, но безуспешно

  1. Я загружаю ваш код https://github.com/zoul/facebook-ios-sdk
  2. беру классы FBVideoUpload.h / m из вашего добавления add в мой проект
  3. включает «FBVideoUpload.h» в FBConnect.h

  4. , затем кодирую для загрузки видео следующим образом:

Это код

FBVideoUpload *upload = [[FBVideoUpload alloc] init];
upload.accessToken = facebookObj.accessToken;
upload.apiKey = fbAppKey;
upload.appSecret = fbAppSecret;
NSString *filePath = @"/Users/pratgupta/Library/Application Support/iPhone Simulator/4.1/Media/DCIM/100APPLE/IMG_0010.M4V";
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];

Но получил ошибку в журналах, т.е.
Невозможно получить ключ сеанса из токена доступа.

, что связано с

if ([self sessionID] == nil) {
        NSLog(@"Unable to retrieve session key from the access token);
        return;
}

в классе FBVideoUpload

Для входа в систему я использую этот код

fbPermissions =  [[NSArray arrayWithObjects:
                       @"read_stream", @"offline_access", @"publish_stream",nil] retain];
facebookObj = [[Facebook alloc] initWithAppId:fbAppId];
[facebookObj authorize:fbPermissions delegate:self];

Я могу получить свойОбновления с Facebook, так что сессия здесь в порядке.
Подскажите, пожалуйста, что я не так делаю?

РЕДАКТИРОВАТЬ
После смены логинашаги, предложенные zoul. Теперь я не получаю журнал ошибок sessionID. Мой запрос сейчас отправляется на сервер fb, но я получаю этот ответ

<?xml version="1.0" encoding="UTF-8"?>
<error_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
  <error_code>100</error_code>
  <error_msg>privacy must contains a valid privacy 'value'</error_msg>
  <request_args list="true">
    <arg>
      <key>description</key>
      <value>upload testing</value>
    </arg>
    <arg>
      <key>privacy</key>
      <value>EVERYONE</value>
    </arg>
    <arg>
      <key>v</key>
      <value>1.0</value>
    </arg>
    <arg>
      <key>api_key</key>
      <value>[here is my API key]</value>
    </arg>
    <arg>
      <key>method</key>
      <value>facebook.video.upload</value>
    </arg>
    <arg>
      <key>session_key</key>
      <value>c4ada192feb82e8f239a283d-555042146</value>
    </arg>
    <arg>
      <key>sig</key>
      <value>8255d4cc3838b278b26fbfc8c86818a3</value>
    </arg>
    <arg>
      <key>title</key>
      <value>test</value>
    </arg>
  </request_args>
</error_response>

Amit Battan

Ответы [ 2 ]

3 голосов
/ 06 апреля 2011

Изменен формат записи словаря конфиденциальности:

  NSDictionary * params = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"Sample video title", @"title",
                          @"Sample video description", @"description",
                          @"{\"value\": \"ALL_FRIENDS\"}", @"privacy",
                          nil];

Документы Graph API для объекта Post говорят об объекте конфиденциальности: http://developers.facebook.com/docs/reference/api/post/

Но это не исправляет видеоне отображаются в «Моих видео» и даже не позволяют моим друзьям просматривать их, если у них есть прямая ссылка.Кнопка «Поделиться» на странице с видео тоже не работает, поэтому я даже не могу разместить ее на своей стене.

1 голос
/ 05 апреля 2011

См. Комментарии в FBVideoUpload.h:

Обратите внимание, что этот код анализирует токен доступа от класс Facebook, который довольно хрупкий, неофициальный и может легко порвать с предстоящими выпусками SDK. Также это кажется, работает только со старой, всплывающей аутентификацией и не новый, который использует переключение приложений. (Новая аутентификация Схема, кажется, приводит к другому формату токена аутентификации что мы не можем разобрать.)

Ваша проблема выглядит так, как будто вы используете современную схему аутентификации с переключением приложений. Это приводит к другому токену доступа и, следовательно, взлом загрузки видео не работает. Переключиться на старую схему аутентификации легко, см. Код в этой ветке (он добавляет свойство forceOldStyleAuth в класс Facebook).


Что касается словаря для передачи, вот как выглядит мой код:

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
    @"Sample video title", @"title",
    @"Sample video description", @"description",
    nil];
upload = [[FBVideoUpload alloc] init];
[upload setApiKey:kAPIKey];
[upload setAccessToken:facebook.accessToken];
[upload setAppSecret:kAppSecret];
[upload startUploadWithURL:movieURL params:params delegate:self];

Это работает для меня.

...