Вкладка iframe Facebook приложение отображается на новой странице, а не в iframe / facebook-canvas - PullRequest
2 голосов
/ 26 ноября 2011

Я использую Python и javascript или php sdk.

Чтобы получить access_token - я следую инструкциям, указанным на странице документации (https://developers.facebook.com/docs/authentication/). Я передаю URL перенаправления в dialog / oauth и получаюaccess_token. Как только это будет сделано, все выходные html, отправленные обратно в браузер, будут отображены на новой странице, оставив iframe / canvas в facebook. (к вашему сведению, весь вывод осуществляется через обычный файл self.response.out.write).вызов функции).

Кажется, что PHP sdk скрывает это, и я не могу найти способ получить: http://www.facebook.com/dialog/oauth?client_id=%s&redirect_uri=%s" диалоговое окно для отправки вывода из перенаправленного URL-адреса в iframe / canvas, который вызвалЭто приложение «Вкладка страницы» (не «Приложение на Facebook»), поэтому на странице конфигурации основных приложений установлены «Имя вкладки страницы» и «URL-адрес вкладки страницы».

У меня нетсеанс еще не реализован, и мне интересно, если это необходимо, чтобы передать цель iframe в качестве переменной состояния и передать его обратно вместе с перенаправлением на URI.

Я искал много сообщений / etc и nо удачи и любая помощь будет высоко ценится!

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

Закладка страницы Недокументированные шаги приложения:

  1. Запутывающей частью является CANVAS_PAGE_URL в примере.Это должен быть URL-адрес веб-приложения (например, https://www.appname.appspot.com/).. Это неясно определено ..

  2. Если access_token и user_id не найдены в подписанном запросе в диалоговом окне авторизациидолжно быть сделано (согласно документации на странице). Это должно быть сделано через скрипт top.location.ref, чтобы выдержать его запуск в виде диалога. Это переходит на новую страницу, перезаписывающую холст (или фан-страницу)который вызвал приложение.

  3. Когда пользователь разрешает разрешения для приложения, приложение вызывается через tab-page-canvas-url? code = "....."На этом этапе необходимо выполнить редирект (который нигде не задокументирован. Мне пришлось посмотреть на код php sdk, чтобы понять это (строка 17 fbmain.php) (redirect () в python и php header ())Перенаправление должно взять URL-адрес приложения на странице поклонника: http://www.facebook.com/FAN_PAGE_NAME?sk=app_nnnnnnn

Потребовалось много часов исследований и копаний, чтобы понять это и надеюсь, что это поможет (я вижу много вопросовподнят вокруг страницы, вырывающейся из iframe / canvas) и основная проблема заключается в дополнительном шаге перенаправления, который FB нигде не документирует ...

(напишите мне, и я рад поделиться кодом Python, который теперь все прекрасно работает)

0 голосов
/ 16 января 2012

Это указано в другом месте, но чтобы прояснить: причина, по которой ваше приложение выходит из Facebook, заключается в том, что диалоги аутентификации уходят от исходного URL-адреса apps.facebook.com.

Это может произойти только с расширеннымразрешения, поскольку новый экран разрешений состоит из двух страниц вместо одной.

После завершения процесса авторизации браузер перенаправляется на полный URL-адрес приложения на вашем сервере.

«Исправление»это отправить браузер обратно в приложение Facebook, используя его адрес http://apps.facebook.com/appname.

[это не кажется хорошим потоком для большинства людей, но именно так оно и есть сейчас.Я думаю, что может быть другой маршрут, используя «Аутентифицированные рефералы» на странице «Auth Dialog» приложений, но еще не использовал его]

Я использую PHP SDK, и вот что яdo:

  1. Проверьте параметр запроса "state", когда ваш redirct_url вызывается после авторизации.Некоторые люди предлагали использовать параметр «code», но я не вижу, чтобы он возвращался.

''

// after completing the first authorization, the redirect url may send users away from Facebook to the redirect url itself.    
//This php code redirects them back to the app page

if (isset($_GET['state'])){ header("Location: http://apps.facebook.com/appname']); exit; }

Если вы знаете лучший способ, пожалуйста, дайте мнезнаю!

...