Размещение фотографий на фан-странице Facebook с помощью iOS SDK

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

Это то, чем я сейчас занимаюсь.

Я вхожу в систему, используя

Facebook *fb = [[Facebook alloc] init];
self.facebook = fb;
[fb release];
NSArray *permissions =  [[NSArray arrayWithObjects:@"read_stream", @"offline_access", @"publish_stream", @"manage_pages", @"user_photos", @"friends_photos",nil] retain];
[facebook authorize:FB_APP_ID permissions:permissions delegate:self];
[permissions release];

После входа в систему я запрашиваю учетные записи

[facebook requestWithGraphPath:@"/me/accounts" andDelegate:self];

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

Затем я установил свой токен доступа к моему объекту facebook на новый access_token.

facebook.accessToken = new_accessToken;

и попробуйте загрузить фото с моей фан-страницы, используя

UIImage *uploadImage = [UIImage imageNamed:@"t200.jpg"];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
               uploadImage, @"source", 
             @"test caption", @"message",             
             nil];


[facebook requestWithGraphPath:@"/me/photos" andParams:params
        andHttpMethod:@"POST" andDelegate:self];

Я получаю ответ

{"error":{"type":"OAuthException","message":"(#1) An unknown error occurred"}}

Это ошибка в API графа facebook? Я также пробовал сделать этот вызов, используя стандартные запросы HTTPS, и получил тот же результат.


person leo83    schedule 23.11.2010    source источник


Ответы (5)


После успешного входа в Facebook вы можете получить список FanPage, запросив @ "/ me / accounts", перейти на нужную фан-страницу и запросить ее accessToken, отправив запрос на @"/FBFanPageID?fields=access_token"

Этот accessToken отличается от вашего facebook.accesstoken.

После получения accessToken fanPage установите его как facebook accessToken by

[_facebook setAccessToken:_accessTokenForFanPage]; // это некорректный шаг

Теперь вы можете загрузить на стену fanPage пользователя @"/FBFanPageID/photos"

Запросить альбомы fanPage от @"/FBFanPageID/albums"

Загрузить в конкретный альбом пользователя @"/AlbumsID/photos"

Для загрузки этих параметров изображения будет использован словарь.

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: IMAGE,@"source", IMAGECAPTION,@"message",
nil];

person Arsalan    schedule 29.01.2012

Старые новости, но ... не уверен в части фан-страницы, но вам нужно добавить «? Access_token = ...» после «/ me / photos» или что-то еще, что вы в конечном итоге используете для графического API, чтобы обойти неизвестную ошибку. SDK facebook не добавляет токен доступа автоматически, поэтому вам придется сделать это самостоятельно.

[facebook requestWithGraphPath: [NSString stringWithFormat: @ "/ me / photos? access_token =% @", facebook.accessToken] andParams: params andHttpMethod: @ "POST" andDelegate: self];

person bmasters    schedule 14.07.2011
comment
Если вы посмотрите на Facebook.m, как это предусмотрено в SDK, вы увидите, что access_token добавлен в params SDK. Однако для фан-страницы нужно получить другой access_token. - person mahboudz; 22.02.2012

У меня очень похожие коды, и он работает, единственное, что немного отличается - я создаю экземпляр Facebook в AppDelegate ..

QRSMAppDelegate * делегат = (QRSMAppDelegate *) [делегат [UIApplication sharedApplication]];

if (![[delegate facebook] isSessionValid]) {
    [[delegate facebook] authorize:permissions];

Как и вы, я изначально создал экземпляр Facebook в контроллере представления и обнаружил много странных ошибок. Проблема (как я позже выяснил) в том, что ... Facebook отвечает, передавая URL-адрес экземпляру класса Facebook, и извне единственной точкой входа в ваше приложение является делегат приложения. (Проверьте пример приложения Facebook sdk Hackbook)!

- (BOOL) application: (UIApplication *) application openURL: (NSURL *) url sourceApplication: (NSString *) sourceApplication annotation: (id) annotation {

BOOL ret = [facebook handleOpenURL:url];

.... возврат (возврат); }

Проблема здесь, конечно, в том, что, если я использую Facebook только в небольшой части моего приложения и за много миль от делегата приложения (создание экземпляра Facebook требует, чтобы вы объявили делегата!

Вместо того, чтобы сталкиваться с такими же сложными проблемами при передаче URL-адреса вверх, на самом деле было проще просто выделить init контроллер представления (делегат Facebook) в делегате приложения и передать его вверх по иерархии представления.

person Paulo    schedule 25.03.2012

Не уверен в этом, так как я новичок в интеграции FB iOS, но я думаю, вам не следует использовать me / photos, а xyz / photos, где xyz - это идентификатор страницы, на которую вы хотите опубликовать.

person gottfried    schedule 30.11.2010
comment
Я пробовал использовать идентификатор страницы, но это тоже не работает. Использование меня кажется правильным, потому что, когда вы меняете токен доступа, вы получаете доступ. Итак, я захожу на вашу фан-страницу. - person leo83; 01.12.2010

Вы можете отправить электронное письмо на свою фан-страницу и получить прикрепленное фото, чтобы оно отображалось так, как если бы его опубликовал администратор.

На своей фан-странице выберите редактирование страницы, а затем выберите мобильный. На мобильной странице Facebook покажет вам адрес электронной почты, который вы можете использовать для публикации на своей фан-странице.

В iOS я использую http://code.google.com/p/skpsmtpmessage/ для отправить электронное письмо

Вы должны использовать это ...

svn checkout http://skpsmtpmessage.googlecode.com/svn/trunk/ skpsmtpmessage-read- Только

скачать код

Не включайте в электронное письмо какой-либо текст, кроме того, что указано в строке темы. В противном случае он не будет опубликован.

person Brian Fritz    schedule 01.06.2012