Публикация фото на фан-странице facebook через приложение для iOS обычными пользователями без прав администратора

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

Погуглив некоторое время, я нашел этот ответ. В соответствии с ним мне нужен access_token фан-страницы и Album_id для этого. Но я не могу найти ни одной подсказки о том, как их получить. До сих пор я пробовал этот код:

if ([appDelegate.facebook isSessionValid]) 
    {
        NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       resultImage, @"picture",
                                       nil];

        [appDelegate.facebook requestWithGraphPath:@"me/photos"
                                         andParams:params
                                     andHttpMethod:@"POST"
                                       andDelegate:self]; // to post on users wall, works fine

         NSString *path = [NSString stringWithFormat:@"my/accounts /fan_page_id?fields=access_toke/photos"];
        [appDelegate.facebook setAccessToken: FACEBOOK_ACCESS_TOKEN];

        [appDelegate.facebook requestWithGraphPath:path andParams:params andHttpMethod:@"POST" andDelegate:self]; // to post on fan page wall,  this doesn't work
    }

Кто-нибудь может мне с этим помочь? Что мне здесь не хватает? Заранее спасибо.

ОБНОВЛЕНИЕ

Согласно этому ответу, обычный пользователь не может публиковать фотографию на стене фан-страниц из приложения iOS, но может поделиться фото на нем. Теперь мой вопрос: как мне разместить фотографию на стене пользователя и одновременно поделиться ею на стене фан-страницы? Является ли это возможным? Как разместить фото на стене фан-страницы?

ОБНОВЛЕНИЕ 2

В этом ответе и вопросе говорится, что обычные пользователи могут публиковать сообщения на стене фан-страницы через ленту новостей, поэтому я изменил свой код нравится:

if ([appDelegate.facebook isSessionValid]) {
        NSMutableDictionary *page_params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       @"fan_page_id", @"to",
                                       @"Test", @"name",
                                       @"Test", @"caption",
                                       resultImage, @"picture",
                                       nil];
        [appDelegate.facebook   dialog:@"feed"
                                andParams:page_params
                                andDelegate:self];

}

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

-[UIImage length]: unrecognized selector sent to instance 0x24d110
2012-06-06 19:59:03.114 app_name[2739:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage length]: unrecognized selector sent to instance 0x24d110'

Что мне теперь делать?

В этот момент, после столь долгого ожидания, у меня возникает вопрос, возможно ли это вообще? Если да, то как выполнить эту задачу? А если нет, то какие есть альтернативы? Пожалуйста, помогите.

Обновление 3

Только что обнаружил, что существует известная ошибка как в пакете SDK для iOS, так и в пакете Стена фан-страницы. Это верно и для загрузки изображений? Если у кого-то есть решение, чтобы избежать этой ошибки, пожалуйста, помогите.


person Shabib    schedule 06.06.2012    source источник


Ответы (4)


В настоящее время (июнь 2012 г.) это невозможно из-за ошибки в API: https://developers.facebook.com/bugs/206254392780441 содержит подробности.

Одним из обходных путей является размещение сообщения на /feed соединении страницы и прикрепление изображения к истории фида. Это изображение не будет отображаться таким же большим, как при правильной загрузке фотографии, но должно работать нормально.

Эта ошибка означает, что публикация в /PAGE_ID/photos соединении Страницы с использованием Пользователя access_token приведет к неправильной загрузке фотографии в /photos соединение пользователя.

Публикация в /photos соединении страницы будет работать, как и ожидалось, при использовании Страницы access_token; фотография появится на странице фотографий страницы, на временной шкале страницы и будет связана с самой страницей (т. е. «со страницы»)

Если ваше приложение предназначено специально для добавления содержимого на страницу и имеет компонент на стороне сервера, другим обходным путем для получения фотографий от пользователя на страницу является предоставление пользователями фотографии через ваш собственный интерфейс (т. е. загрузка ее с устройства пользователя на ваш сервер) и используйте access_tokens одного из администраторов страницы, чтобы получить Страницу access_token и выполните загрузку таким образом.

person Igy    schedule 10.06.2012
comment
Благодарю за ваш ответ. как я уже говорил, изображение берется с камеры телефона пользователя, а затем пользователь размещает его на своей стене и в то же время на стене фан-страницы. в этом случае, можете ли вы предоставить мне лучший способ? Может быть, какой-нибудь пример/учебник на случай, если вы сделали такую настройку? - person Shabib; 11.06.2012
comment
Вы можете опубликовать на своей стене из приложения и одновременно загрузить фотографию на свой сервер, а затем ваш сервер будет использовать токен доступа к странице для загрузки ее на страницу. - person Igy; 13.06.2012

Вместо использования диалогового окна вы можете попросить пользователя предоставить разрешение — publish_stream
(поскольку есть ошибка в компоненте диалога, иначе это не требуется)

Затем вы можете опубликовать сообщение на стене страницы (при условии, что страница разрешает в настройках страницы).

Вы можете попробовать использовать обозреватель Graph API. Вы можете изменить идентификатор страницы и протестировать, предоставив вышеуказанное разрешение на вкладке расширенных разрешений.

Примечание
Еще одна вещь, которую вы должны помнить, это то, что вы не можете отправлять данные изображения в параметре изображения. Вы должны предоставить ссылку на изображение.

person Venu    schedule 07.06.2012
comment
Спасибо за ваш ответ, я разрешил пользователю публиковать поток, и страница позволяет размещать анонимных пользователей (которым даже не понравилась страница) на своей стене. К вашему сведению, изображение, которое я пытаюсь опубликовать, взято с камеры, поэтому я не знаю, как я могу предоставить ссылку на изображение в качестве параметра изображения. Если вы успешно выполнили задачу, которую я пытаюсь сделать, можете ли вы предоставить мне учебник или что-то в этом роде? Я был бы очень признателен. - person Shabib; 08.06.2012
comment
Если у вас есть сервер, вы можете загрузить изображение на этот сервер и получить URL-адрес, а затем использовать этот URL-адрес для публикации на стене страницы. - person Venu; 08.06.2012
comment
У меня его нет, и это не звучит хорошим решением. Это телефонное приложение, пользователь делает снимок, приложение вносит в него некоторые изменения, а затем оно публикуется в Facebook (на стене пользователя и на стене фан-страницы). Если мне нужно управлять сервером для этого, это не имеет смысла. В любом случае спасибо за ваш ответ. - person Shabib; 08.06.2012
comment
*/feed не принимает данные изображений. Это должен быть URL. Вы можете воспользоваться услугой Amazon s3, которая является очень дешевой услугой. И вы можете легко это реализовать. Если это вам не подходит, то у вас нет возможности разместить изображение на стене. - person Venu; 08.06.2012

Я бы просто попытался устранить ошибку исключения. Есть возможность размещать новости на своей фан-странице. НЕвозможно публиковать как саму фан-страницу, так как для этого потребуется аутентификация (таким образом, требование токена доступа ... вы должны войти в систему как этот пользователь, чтобы публиковать от его имени). @Igy уже обращался к этому выше.

Однако у вас нет кода для того, где вы используете средство выбора изображений для получения изображения. Исключение, которое вы получаете, связано с тем, что вы пытаетесь проверить длину объекта UIImage вместо объекта NSData (это то, что требует Facebook). Чтобы преобразовать изображение из средства выбора в данные, используйте приведенный ниже фрагмент (замените переменную img своим UIImage).

NSData *imgData = UIImageJPEGRepresentation(img, 0);

// Now call to length by facebook SDK will work and the exception will not fail
NSLog(@"Size of Image(bytes):%d",[imgData length]);
person Matt Hudson    schedule 12.06.2012

Я думаю, что вы используете неправильный аргумент для размещения фотографии

Вы должны использовать @"url" вместо @"picture"

Я не уверен в этом, но это может сработать.

У меня была такая же проблема в javaScript, которая была решена.

Просмотрите здесь, чтобы узнать о моей проблеме.

person sumitkanoje    schedule 15.06.2012
comment
Это работает в целом, но не отменяет ошибку «публикация на странице с фотографиями», поскольку пользователь фактически загружает на фотографию пользователя. - person Igy; 17.06.2012