Обнаружение лайков с помощью Facebook JavaScript API + iFrame

Создание приложения с помощью Facebook JavaScript API, которое будет встроено в страницу с помощью нового метода iframe.

Я хочу определить, понравилась ли им текущая страница. Обычно я бы использовал print_r ($ _ REQUEST) в PHP, но, похоже, это не работает при использовании iframe.

Также есть этот вариант: http://developers.facebook.com/docs/reference/fbml/visible-to-connection/, но в нем говорится, что он устарел, и мне никогда не нравился этот метод, поскольку он довольно хакерский.

Как теперь это сделать? Предпочитаете использовать XFBML + JavaScript API, но при необходимости можете использовать PHP.


person wesbos    schedule 29.04.2011    source источник
comment
Что вы имеете в виду под страницей? страницу в Facebook?   -  person ifaour    schedule 29.04.2011


Ответы (1)


Мы делали это несколько раз, и, похоже, это работает очень хорошо. Он использует XFBML для создания виджета Like Button и JS SDK для визуализации XFBML. и подпишитесь на события Facebook. Пример кода ниже:

edit: Поскольку вы хотите определить, является ли пользователь поклонником, когда страница загружается, и FB отказался от этой функции, чтобы вы могли получать ее напрямую от них, когда загружается холст, передав fb_page_id в адресная строка запроса, вам потребуется установить приложение, чтобы пользователь мог проверить свою фанатичность вашей страницы. Это, безусловно, добавляет много трений в ваше приложение, но я думаю, что это то, что есть сейчас.

    <?php
require 'facebook.php';

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
    'appId'  => 'YOUR APP ID',
    'secret' => 'YOUR APP SECRET',
    'cookie' => false,
));

try
{
    $session = $facebook->getSession();

    if (empty($session['uid']))
    {
        throw new Exception("User not connected to application.");
    }

    $is_fan = $facebook->api(array(
        'method'    => 'fql.query',
        'query'     => "SELECT uid, page_id FROM page_fan WHERE uid = {$session['uid']}"
    ));

    if (false == $is_fan || count($is_fan) == 0) // 0 results will be returned if the user is not a fan
    {
        $is_fan = false;
    }
    else
    {
        $is_fan = true;
    }   
}
catch (FacebookApiException $e)
{
    /**
     * you don't have an active user session or required permissions 
     * for this user, so rdr to facebook to login.
    **/

    $loginUrl = $facebook->getLoginUrl(array(
        'req_perms' => 'user_likes'
    ));

    header('Location: ' . $loginUrl);
    exit;
}
?>
<html>
<head>
</head>
<body>

<? if (empty($is_fan)): //user is not a fan. ?>
    <fb:like href="http://www.facebook.com/your-facebook-page"
        show_faces="true"
        width="400">
    </fb:like>
<? else: ?>
    Yay! You're a fan!
<? endif; >?

<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js" type="text/javascript">
    </script>
<script type="text/javascript">
FB.init({
    appId: '<?= FB_APP_ID; ?>',
    cookie: true,
    status: true,
    xfbml: true
});

// Subscribe to the edge creation event, from Facebook
FB.Event.subscribe('edge.create', function(response)
{
    alert("Congratulations! We are so excited that you are a fan now! woot!")
});

</script>

</body>
</html>

ладно, наконец-то получил все форматирование с прямой уценкой. это было совсем не больно .. (sike): |

person Jim Rubenstein    schedule 29.04.2011
comment
Это работает для события, но если они переходят на уже понравившуюся страницу, событие не запускается. - person wesbos; 29.04.2011
comment
Правдивая история. Для этого мы добавляем? Fb_page_id = ‹your-page-id› в строку запроса адресной строки (так..apps.facebook.com / your-app / path / to / page.php? Fb_page_id = 123123123). Это добавляет информацию к данным POSTed. Однако, к сожалению, FB отказался от этой функции, и если вы отключите некоторые из их параметров миграции, она не будет работать. - person Jim Rubenstein; 29.04.2011
comment
Я только что перепроверил свой комментарий, и так, как я думал; Facebook удалил / устарел / отключил значение fb_sig_is_fan из данных, отправленных вашему приложению. Итак, я отредактирую свой код выше, чтобы проверить возраст фанатов при загрузке страницы. - person Jim Rubenstein; 29.04.2011
comment
Это просто добавляет параметр к моему массиву под названием 'fb_page_id' - я не понимаю, что он делает? Я должен видеть кучу данных POST? - person wesbos; 29.04.2011
comment
Это выглядит великолепно, сейчас попробую. Благодаря тонну :) - person wesbos; 29.04.2011
comment
@Wes, к сожалению, они недавно отказались от этой функции. Раньше к параметру fb_sig_is_fan добавлялось значение 1 или 0. К сожалению, этой функции больше нет. Я опубликовал новое решение выше, оно использует PHP и требует установки ... если вы хотите сделать его решением без php, у вас все еще есть та же проблема, но вы можете использовать Facebook JS SDK, чтобы получить логин и запрос FQL ... - person Jim Rubenstein; 29.04.2011
comment
Привет, JimR, я получаю сообщение об ошибке, что они не подключены к приложению. Это правда, потому что я хочу, чтобы пользователь подключался к странице, а они не знают о приложении. Любые идеи? - person wesbos; 03.05.2011
comment
@Wes, да, проблема в том, что для того, чтобы проверить, является ли пользователь поклонником страницы, у вас должен быть доступ к понравившимся страницам через api. Для этого вам потребуется установить от них приложение. Я понимаю, что это невероятно далеко от идеала, и раньше это было не так - Facebook недавно устарел и удалил функцию, которая позволяет вам проверять, был ли пользователь фанатом без установки приложения): - person Jim Rubenstein; 03.05.2011