Я пытаюсь опубликовать фотографию на странице 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.