Как получить доступ к идентификатору пользователя Facebook из JavaScript в рамках fb: iframe? - PullRequest
2 голосов
/ 30 июня 2009

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

Ответы [ 4 ]

3 голосов
/ 30 июня 2009

API-интерфейс Facebook очень сложен, а документация очень скудная. Вы правы насчет Javascript ... нормальный Javascript работает только внутри iframe на Facebook, в противном случае вы ограничены подмножеством отфильтрованного Javascript под названием FBJS. Вы можете спокойно игнорировать что-либо о FBJS в документации и сосредоточиться на фреймах.

Загрузка фрейма

Первое, что я хотел бы упомянуть, это то, что тег <fb:iframe> фактически отображается с кучей вещей в атрибуте src. Поэтому, если вы добавите такой тег на свою страницу в Facebook: <fb:iframe src="http://example.com/page?x=y">, то, чем он закончится при загрузке в браузер пользователя, будет выглядеть примерно так:

<iframe src="http://example.com/page?x=y&fb_sig_in_iframe=1&fb_sig_locale=en_US&fb_sig_in_new_facebook=1&fb_sig_time=1246340245.3338&fb_sig_added=1&fb_sig_profile_update_time=1242155811&fb_sig_expires=1246345200&fb_sig_user=000000001&fb_sig_session_key=2.d13uVGvWVL4hVAXELgxkZw__.3600.1246345200-000000001&fb_sig_ss=mZtFjaexyuyQdGnUz1zhYTA__&fb_sig_api_key=46899e6f07cef023b7fda4fg2e21bc58&fb_sig_app_id=22209322289&fb_sig=bbc165ebc699b12345678960fd043033">

Facebook добавляет кучу вещей в src. Параметр, который сообщает вам идентификатор пользователя Facebook, fb_sig_user (здесь 000000001). Я предполагаю, что ваше приложение настроено как «приложение FBML», так как вы, вероятно, не будете использовать тег <fb:iframe> в «приложении Iframe». Тем не менее, метод рендеринга в обоих случаях одинаков, и вы получаете кучу дополнительных вещей к вашему документу src в приложении Iframe.

Это действительно только передает вам идентификатор пользователя Facebook при первой загрузке iframe. Последующие операции внутри iframe не будут иметь доступа к этому идентификатору пользователя, если вы не передадите его явно.

Facebook Connect

Если вы хотите взаимодействовать с Facebook изнутри iframe, вот где появляются библиотеки JavaScript Connect для Facebook Connect. Лучшая инструкция по настройке Facebook Connect, вероятно, , это вики-страница , но она все еще немного мутная. Facebook Connect можно использовать как для абсолютно внешних сайтов, так и для обычного контента внутри iframe. Вы попадаете в последнюю категорию, поэтому, если вы будете следовать инструкциям в этой ссылке и использовать первую строку кода в шаге 2 (для FeatureLoader), у вас должно быть все в порядке.

После того, как вы включили скрипт FeatureLoader.js и назвали его FB.init, вы, как правило, должны работать с FB Connect. С этого момента вы должны иметь возможность взаимодействовать с API . Метод users.getLoggedInUser() выдаст вам текущий идентификатор пользователя в iframe через Javascript.

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

1 голос
/ 22 марта 2011

Обратите внимание, что с марта 2011 года FB переходит к запросам POST для загрузки фреймов. Он отправляет действие формы с method = "post" и target = "iframe_canvas", плюс входной тип = "hidden" с подписанным "request "

0 голосов
/ 06 ноября 2010

Попробуйте Env.user, у него есть идентификатор пользователя.

0 голосов
/ 30 июня 2009

Вы не можете использовать API Facebook, чтобы получить идентификатор пользователя, позвонив по номеру

Users.getLoggedInUser

Вы можете получить доступ к этому значению, а затем использовать echo (), чтобы добавить его в свой HTML как переменную javascript, что сделает его доступным для вашего кода Javascript.

...