Пост картинки в Facebook попадает не туда

Я пытаюсь опубликовать фотографию на странице Facebook с id= 226338660793052, но она попадает в /me/photos. Что я делаю не так?

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   imageToSend, @"source",
                                   facebookMessageTextView.text, @"message",
                                   nil];
[facebook requestWithGraphPath:@"/226338660793052/photos" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

Я не получаю никакого сообщения об ошибке. Я не получаю ничего, кроме того, что фотография попадает в мой собственный альбом, me/photos, а не в альбом 226338660793052/photos.

Но когда я просто отправляю сообщение на эту страницу, я получаю успешное сообщение на временной шкале страницы:

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"http://www.bitsonthego.com", @"link",
                                   @"my profile", @"name",
                                   facebookMessageTextView.text, @"message",
                                   nil];
[facebook requestWithGraphPath:@"/226338660793052/feed" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

Что я упускаю? Я знаю, что это должно быть возможно, поскольку я могу использовать браузер для загрузки изображения на нужную страницу, как случайный пользователь, не являющийся администратором. Я просто не могу сделать это из API графики.

UPDATE:

Я решил часть проблемы. Вы должны использовать access_token целевой страницы. Вот как его получить:

    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"access_token",  @"fields",
                                   nil];
    FBRequest *request = [facebook requestWithGraphPath:@"226338660793052" andParams:params andDelegate:self];

Когда вы получите результат, добавьте его в транзакцию выше:

    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   image, @"source",
                                  [result objectForKey:@"access_token"], @"access_token",
                                   facebookMessageTextView.text, @"message",
                                   nil];

    FBRequest *request = [facebook requestWithGraphPath:[[result objectForKey:@"id"] stringByAppendingString:@"/photos"] andParams:params andHttpMethod:@"POST" andDelegate:self];

Но это не сработает, потому что Facebook.m заменит этот новый access_token на стандартный пользовательский access_token, поэтому я внес изменение в Facebook.m примерно в строке 166, от:

  if ([self isSessionValid]) {
        [params setValue:self.accessToken forKey:@"access_token"];
  }

до:

  if ([self isSessionValid]) {
    if ([params valueForKey:@"access_token"] == nil)
        [params setValue:self.accessToken forKey:@"access_token"];
  }

Это позволяет сохранить код доступа, который вы указываете в качестве части параметров, от попирания Facebook.accessToken. Теперь это отправит картинку на интересующую меня страницу.

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

Согласно документации Facebook, если страница является неограниченной, как эта страница, то на ней можно разместить фотографию:

ПРИМЕЧАНИЕ:

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

Я упомянул, что моя страница является публичной и не ограничена?

Токены доступа к странице

Чтобы выполнить следующие операции в качестве страницы, а не текущего пользователя, вы должны использовать маркер доступа страницы, а не маркер доступа пользователя. обычно используемый для чтения объектов Graph API. Этот маркер доступа можно получить, выполнив HTTP GET к /USER_ID/accounts с разрешением manage_pages. Это вернет список страниц (включая страницы профиля приложения), к которым пользователь имеет административный доступ, вместе с access_tokens для этих страниц. В качестве альтернативы можно получить маркер доступа к странице для одной конкретной страницы, выполнив HTTP GET к /PAGE_ID?fields=access_token с разрешением themanage_pages, как описано выше. описано выше. Публикация на страницу также требует разрешения publish_stream если не указано иное.

Итак, как можно опубликовать фотографию на публичной/неограниченной странице? Я могу сделать это из любого браузера, так что это возможно, но как это делается с помощью Graph API? Учитывая, что я могу отправлять сообщения в ленту без всяких махинаций с access_token, чем отличается отправка картинки?

В общем, я пытаюсь сделать следующее: отправить картинку, а не просто уменьшенное изображение URL, на публичную/неограниченную страницу, используя Graph API.

9
задан mahboudz 23 February 2012 в 18:00
поделиться