Не удается получить разрешение Facebook publish_action на iOS

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

_permissions =  [NSArray arrayWithObjects:@"publish_stream", @"publish_actions", @"user_birthday", nil];

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

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       _facebook.accessToken, @"access_token",
                                       nil];
        [_facebook requestWithGraphPath:@"329756493773381/og.likes" andParams:params andHttpMethod:@"POST" andDelegate:self];

Я получаю такой ответ с ошибкой:

(facebookErrDomain error 10000.)" UserInfo=0x20090590 {error={
    code = 200;
    message = "(#200) Requires extended permission: publish_actions";
    type = OAuthException;
}}

При входе в приложение Facebook запрашивает у меня разрешение увидеть мой день рождения и сообщает, что отправит сообщение от моего имени, но, похоже, не получит разрешения publish_actions.

Есть ли что-то, что мне нужно сделать?

Я вижу, что у Temple Run есть кнопка «Нравится» на Facebook и предлагаются бонусные монеты за ее нажатие. Это то, чего я хочу достичь.

РЕДАКТИРОВАТЬ -------

Я изменил свои разрешения на @ "publish_actions", @ "user_birthday", и теперь в диалоге авторизации говорится

«Это приложение может публиковать сообщения от вашего имени, в том числе объекты, которые вам понравились, и многое другое»

что похоже на разрешение publish_actions, однако я все еще получал ошибку

message = "(# 200) Требуется расширенное разрешение: publish_actions";

Я изменил эту строку:

[_facebook requestWithGraphPath:@"329756493773381/og.likes" andParams:params andHttpMethod:@"POST" andDelegate:selrf];

к этому:

[_facebook requestWithGraphPath:@"329756493773381/og.likes" andDelegate:self];

и теперь я получаю ответ, хотя он не ставит лайк

Это результат ответа:

{
    data =     (
    );
    paging =     {
        next = "https://graph.facebook.com/329756493773381/og.likes?sdk=ios&sdk_version=2&access_token=BAAGeAp3ZBGwoBAPICjlgB5zK0YECyP8yElf8hJoMrx8Qs4vjeZAK5PlXFAVbGM1JyXHE0wZBvU0aBeCzCUTZBejQgoJ44CAIQsrG64TfrHdxjMqWD&format=json&offset=25&limit=25";
    };
}

Есть идеи, что попробовать дальше?

РЕДАКТИРОВАТЬ 2 --------------- Я добиваюсь прогресса. Я добавил идентификатор пользователя в запрос графика следующим образом

NSString *graphPath = [NSString stringWithFormat:@"%@/og.likes",facebookID];

и использовал эти параметры

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       @"AAAGeAp3ZBGwoBABvKjsPZAoQQNG9cDPJI2v2TI8acyyPSNtm9ZBkfydHqVZAjSKWSbLuvFwxyxSrCts7kFZCnh7Y6f5PFNlWb6smF8XF33wlRZBgfLyhT1", @"access_token",
                                       @"http://samples.ogp.me/329756493773381", @"object",
                                       nil];

и теперь у меня появляется что-то вроде того, что появляется на моей временной шкале :-) Я использовал токен доступа, предоставленный входом в систему Facebook, но похоже, что тот, который предоставлен объектом графика, отличается.

Теперь то, что я вижу, имеет следующий шаблон:

Даррен любит объект на MyAPP

Возможно ли вообще иметь это как

Даррену нравится MyAPP со ссылкой на страницу приложения в Facebook?

Спасибо


person Darren    schedule 03.07.2012    source источник
comment
Установлен ли тип приложения на «Собственный / Рабочий стол» в настройках приложения FB - ›расширенный -› аутентификация?   -  person borisdiakur    schedule 07.07.2012
comment
Да, это так. Я сейчас не думаю, что это возможно. Вы можете любить вещи в своем приложении, например рецепт в приложении с рецептами, но вы не можете любить фан-страницы и т. Д.   -  person Darren    schedule 07.07.2012
comment
Ты прав. В документах говорится, что следующие условия должны выполняться, чтобы опубликуйте встроенное подобное действие: внутри приложения есть страница объекта Open Graph, которая правильно размечена с помощью метатегов Open Graph, и зритель намеренно нажал на настраиваемую в приложении кнопку вроде , связанную с in -app содержание. Однако вы всегда можете перенаправить на свою страницу в Facebook.   -  person borisdiakur    schedule 07.07.2012


Ответы (2)


Проверьте, выполнили ли вы следующие шаги:

https://developers.facebook.com/docs/opengraph/tutorial/

«Примечание. Пользовательское приглашение для этого разрешения будет отображаться на первом экране расширенного диалога аутентификации и не может быть отозвано как часть процесса аутентификации». - ссылка

Попробуйте это, если вы еще этого не сделали:

Диалог аутентификации -> Настроить, как Facebook отсылает пользователей к вашему приложению -> Добавить разрешения publish_actions.

https://developers.facebook.com/docs/opengraph/authentication/

«Чтобы включить новый диалог аутентификации, перейдите на панель инструментов приложения и включите настройку расширенного диалога аутентификации в разделе« Дополнительно »вашего приложения». -ссылка

Надеюсь это поможет!

person AlexanderN    schedule 06.07.2012
comment
Я пробовал сбросить симулятор. Я удалил приложение из настроек своей учетной записи Facebook, это заставляет его снова запрашивать разрешение. Он спрашивает меня и сообщает, что будет публиковать сообщения от моего имени, но я все еще не получаю разрешения publish_actions! - person Darren; 06.07.2012
comment
Нашел это в другом месте на SO: я думаю, что fb изменит это поведение в ближайшем будущем, но в настоящее время кажется, что приложение должно быть в категории 'игра', чтобы запросить разрешение 'publish_actions' ... (я нахожусь в режиме песочницы ) - person AlexanderN; 06.07.2012
comment
Мое приложение находится в категории «Игры», хотя я думаю, что это упоминалось, когда publish_actions находился в БЕТА-тестировании. Теперь у него есть полная версия. - person Darren; 06.07.2012
comment
Я прочитал его, но, поскольку в примере создается веб-сайт, за ним трудно следовать. Я почти уверен, что все это настроено правильно. Диалог Auth имеет publish_actions как права пользователя и друга и publish_stream как расширенное разрешение. Глупо то, что вы не можете добраться до этого момента, не введя идентификатор магазина приложений в основных настройках в Native iOS APP !!, так что нужно вставить фиктивный. Я все еще не получаю разрешения - person Darren; 06.07.2012
comment
О, и я не могу отправить график, пока не использую его один раз, что, очевидно, я не могу сделать. - person Darren; 06.07.2012
comment
Я добился небольшого прогресса, см. Правку внизу исходного вопроса. - person Darren; 07.07.2012
comment
Больше прогресса, см. Правка 2. Спасибо. - person Darren; 07.07.2012
comment
@Darren Я как раз собирался предложить внесенные вами изменения, но вместо этого отправил идентификатор страницы в качестве объекта. Однако кажется, что в настоящее время это невозможно. Несколько дней назад Facebook действительно сильно изменил API, так что вы все равно можете попробовать. stackoverflow.com/questions/9809783/like-application-api stackoverflow.com/questions/3061054/ - person AlexanderN; 07.07.2012
comment
позвольте нам продолжить это обсуждение в чате - person AlexanderN; 07.07.2012

Похоже, это та же проблема, с которой я столкнулся с этим вопросом SO: Facebook iOS SDK 3.0, реализовать действие Like с URL-адресом?

Но если вы хотите, чтобы ваша страница facebook в приложении понравилась вам, это невозможно сделать в Objective C. Только с помощью кнопки «Мне нравится» в javascript, которую вы можете создать здесь: https://developers.facebook.com/docs/reference/plugins/like/

То, как Temple Run делает это, заключается в отображении кнопки Like в веб-представлении, поэтому их кнопка Like фактически находится на их сервере, это, возможно, некрасивый взлом, но сработает для понравившейся страницы.

person Joakim Engstrom    schedule 07.09.2012