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

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

После поиска в Google, я нашел этот ответ. В соответствии с этим мне нужен 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
    }

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

UPDATE

В соответствии с этим ответом обычный пользователь не может публиковать фотографию на стене фан-страниц из приложения 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

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

Ответы

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Вы можете попробовать использовать график api explorer. Вы можете изменить идентификатор страницы и протестировать, предоставив вышеуказанное разрешение на вкладке расширенного разрешения.

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

Ответ 3

Я просто попытался бы устранить ошибку исключения. Вы можете отправить сообщение на ленту новостей вашего фан-сайта. Его невозможно разместить в качестве самой страницы вентилятора, так как для этого потребуется аутентификация (при этом требование токена доступа.. вы должны войти в систему как этот пользователь, чтобы опубликовать их). @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]);

Ответ 4

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

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

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

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

Пожалуйста, просмотрите здесь для ссылки на мою проблему