Структура сайта для многостраничного приложения Facebook Canvas

Это может показаться очевидной проблемой, но я просмотрел сайт разработчиков Facebook о приложениях на основе холста и facebook csharp sdk Так и не нашел ответа на свои вопросы.

Я использую facebook-c#-sdk v5.4x или что-то в этом роде, .net 3.5 с использованием веб-форм.

Приложение на основе холста для рабочего стола будет иметь несколько точек входа.

https://apps.facebook.com/my_canvas_app/Default.aspx
https://apps.facebook.com/my_canvas_app/Register.aspx?EventID=12345
https://apps.facebook.com/my_canvas_app/SomeOtherPage.aspx

Мой первый вопрос заключается в том, что из первого запроса от facebook я получаю signed_request (о котором позаботится facebook-c#-sdk), у меня есть токен oauth, который действителен примерно 2 часа. Каков правильный способ обновить этот токен oauth и убедиться, что он действителен, прежде чем пытаться сделать запрос oauth (запросить график и т. д.)?

Прямо сейчас все мои ссылки (скажем, из Default.aspx) выглядят как <a href="https://apps.facebook.com/my_canvas_app/SomeOtherPage.aspx" target="_top">Go to Some Other Page</a>, которые в конечном итоге совершают круговой переход на facebook, получая новый signed_request и, следовательно, обновленный токен oauth.

Во-вторых, выполняя обычную обратную передачу формы через asp.net на мой собственный сайт, я гарантирую, что signed_request находится в форме с помощью простого <input type="hidden" name="signed_request" value="<%=Request.Form["signed_request"]%>" />, который, кажется, отлично работает для приложения. Если я пропущу это, то обратная передача не будет иметь информации oauth, что приведет к сбою. Это правильный способ выполнить обратную передачу в приложении на основе холста? Из того, что я вижу при просмотре источника csharp-sdk, в сеансе ничего не сохраняется для сохранения токена oauth между запросами, поэтому скрытый ввод и ссылки target="_top" требуются для нескольких страниц/обратных передач, am Я прав в этом выводе?

В-третьих, при разработке мобильного приложения на основе холста (без iframe) все ссылки на моей странице по-прежнему должны вести на https://apps.facebook.com/my_canvas_app/MobilePage.aspx, если мое первое предположение верно.

Если бы кто-нибудь мог пролить свет на эти темы, я был бы очень признателен.

Спасибо!


person Matthew    schedule 30.05.2012    source источник


Ответы (2)


Прямо сейчас все мои ссылки (скажем, из Default.aspx) выглядят как «Перейти на другую страницу», которая в конечном итоге совершает круговой переход на facebook, получает новый signed_request и, следовательно, обновленный токен oauth.

Я бы предложил также встроить JavaScript SDK на ваши страницы — тогда вызов FB.getLoginStatus также должен каждый раз давать вам действительный токен доступа. Другая вещь, которую вы можете сделать, это обменять токен краткосрочного доступа, который вы получаете при входе пользователя в систему, на долгосрочный, см. https://developers.facebook.com/roadmap/offline-access-removal/

Если вы не сохраняете токен доступа в какую-то сессию, то, я думаю, вам придется передавать его со страницы на страницу с помощью обратной передачи, да.

(И, возможно, вам следует взглянуть на https://developers.facebook.com/docs/authentication/access-token-expiration/.)

person CBroe    schedule 31.05.2012
comment
Я хочу сделать все oauth без javascript, если это возможно. Если требуется javascript, то зачем вообще signed_request? Насколько я понимаю, signed_request является альтернативой использованию javascript lib. - person Matthew; 31.05.2012
comment
Если вы выполняете аутентификацию на стороне сервера, то токен доступа должен быть действителен около 60 дней, а не только два часа (см.: developers.facebook.com/roadmap/offline-access-removal) - person CBroe; 31.05.2012

Что я делаю, так это использую signed_request для каждой страницы. Все ссылки в среде рабочего стола ведут на http://apps.facebook.com/myappnamespace/MyPageName.aspx с target="_top", таким образом, каждое изменение страницы получает обновленный токен oauth. Мобильные устройства работают по-другому, так как signed_request недоступно для мобильных устройств. Решение для этого состоит в том, чтобы вместо этого использовать аутентификацию на стороне сервера. Я не использую http://apps.facebook.com/myappnamespace для мобильной среды, так как он не находится в iframe. Мобильный работает как любой другой обычный веб-сайт.

person Matthew    schedule 27.07.2012