vs OAuth 2.0 feat. Graph API Facebook

Создание AS3 iFrame приложения на Flash для Facebook на новом Graph API с использованием OAuth 2.0

Недавно Facebook анонсировал запуск нового Graph API который в корне отличается от старого REST API, а также о запуске новой системы авторизации OAUTH 2.0.
В связи с этим при разработке нового приложения встал вопрос об изучении этих двух вещей, результатами которого я хочу поделится с тобой, мой юный разработчик.
Этот метод подключения к API не претендует на эталон, но поможет начать твой тернистый путь.


Полезные ссылки:
http://developers.facebook.com/docs/
все документы о Graph API

http://developers.facebook.com/docs/api/
описание Graph API
http://developers.facebook.com/docs/reference/api/
объекты и методы Graph API
http://developers.facebook.com/docs/authentication/
об авторицазии OAuth 2.0
http://developers.facebook.com/docs/reference/javascript/
об использовании JavaScript SDK
http://www.adobe.com/devnet/facebook/html/popup_hiw_03.html
доступная схема взаимодействия для iFrame Flash приложения и Facebook API
http://blog.yoz.sk/2010/05/facebook-graph-api-and-oauth-2-and-flash/
howto с Flex примером с помощью которого был создан этот мануал

Капитан Очевидность подсказывает, что если переключить Facebook на родной английский язык, то интерфейс станет удобнее и красивше, а ориентироваться станет попроще.

Сначала немного теории.

Чтобы авторизоваться и начать работать с приложением пользователь должен пройти процедуру аунтефикации, которая основана на получении access_token ключа.
Для получения ключа выполняется следующая последовательность действий:

а. пользователь обращается к страничке приложения http://apps.facebook.com/some_application/;

б. fb делает редирект на сервер разработчика и грузит index.html с приложением;

в. приложение обращается к fb за аунтефикацией (в данном случае через JavaScript SDK) и доступом к расширенным параметрам управления профайлом;

г. пользователь подтверждает или неподтверждает доступ к параметрам на основе чего генерируется access_token;

д. fb делает запрос к callback.html и передаёт access_token;

е. callback.html c помощью java скрипта передает в swf ключ access_token;

ж. можно работать с api через приложение;

Теперь практика.

1. Чтобы получить возможность создавать и управлять своими приложениями, тебе необходимо установить себе приложение Developer.

2. Заходишь в Developer -> +Set Up New Application. Basic: заполняешь все доступные пониманию поля, загружаешь превьюхи.

Canvas -> Canvas Page URL: пишешь желаемое имя будущего приложение. Например: my_application

Canvas -> Canvas Callback URL: пишешь путь к папке где будет хостится твоё приложение. Например: http://www.myhost.ru/my_application/

Нужно заметить, что Facebook в отличии от Вконтакта не предоставляет возможность заливать свои swf файлы на свои серверы. Поэтому каждый разработчик должен иметь свой хостинг.

Connect -> Connect URL: опять путь к своей папке. Остальные поля пока не важны, жмешь Save Changes.

3. Качаешь два класса FacebookOAuthGraph и FacebookOAuthGraphEvent. Кладёшь их в папки sk.yoz.net и sk.yoz.events соответственно.

4. Создаешь класс своего приложения, у меня это FacebookTester.as (ссылка для скачки исходников внизу поста):

Импортируем наши классы:

import sk.yoz.events.FacebookOAuthGraphEvent;
import sk.yoz.net.FacebookOAuthGraph;

Определяем переменные:
private var clientId:String = "000000000000000"; //Application ID вашего приложения
private var scope:String = "publish_stream,user_photos,user_photo_video_tags,friends_photo_video_tags"; //просим у пользователя разные разрешения
private var facebook:FacebookOAuthGraph = new FacebookOAuthGraph();
private var redirectURI:String = "http://www.myhost.ru/my_application/callback.html"; //об этом ниже

Общение с API происходит через метод call:
facebook.call(api_method, data, url_method);
Где:
api_method - методы Graph API (например: “me/friends”), которые теперь называются ‘connections’.
data - необязательный параметр, передаваемые дополнительные параметры в виде URLVariables
url_method - необязательный параметр, POST или GET (по умолчанию)

Например, чтобы получить список своих друзей вызываем facebook.call(“me/friends”);
Все ответы от Graph API приходят в JSON формате и отображаются в окне result.

5. Создаем файл callback.html, он нужен для передечи полученного hash-ключа из браузера в приложение.


  <script type="text/javascript"><!--mce:0--></script>

You may now close this window.

6. Создаем index.html, непосредственно контейнер для нашего swf файла. В нем же осуществляется аунтефикация с помощью JavaScript SDK.

Не забудь заменить ’00000000000000′ на свой Application ID.

7. Заливаешь все файлы на свой сервер http://www.myhost.ru/my_application/ не забываете о волшебном crossdomain.xml

8. Идёшь на http://apps.facebook.com/my_application/ тестировать результат.

Нажимаешь на кнопку “Connect” – вываливается popup с запросом доступа. Разрешаешь. Facebook делает редирект на callback.html и передаёт access_token.
Теперь ты авторизован, о чем говорит сообщение authorized, и трэйс access_token.
В следующие заходы в приложение авторицация будет происходить в фоновом режиме, так как OAuth действует порядка 24 часов.

Далее ты можешь тестировать различные запросы к Graph API и видеть ответы от сервера в поле result.
Кнопка call нужна для запросов отдающих JSON.
Кнопка call binary нужна для запросов которые отдают результат в byte array виде (например “me/picture”), это картинки, видео и мп3.
Кнопка set status ставит статус вашему профайлу.

Архив с исходниками качать тут.

Задавайте вопросы, пишите уточнения или правки.
Статья будет постепенно усовершенствоваться и обновляться.

Tags: , , , , ,

5 comments

  1. спасибо за тутор

  2. Попробовал повторить, получил ошибку на странице приложения:
    Application Temporarily Unavailable

    Runtime errors:

    URLExceptionEmpty URLs not allowed here

    fb:iframe: Empty URLs not allowed here

    Sorry, the application you were using is experiencing a problem. Please try again later.

    Вот какие ошибки -

    URLExceptionEmpty URLs not allowed here
    fb:iframe: Empty URLs not allowed here

    Подскажите, что они обозначают? Как их исправить?

  3. Спасибо за урок. А можете подсказать какие максимальные размеры (в пикселях) приложения?

  4. Может быть это уже все устарело…
    хотелось бы уточнение, по поводу размещения (и именования) этих полей на данный момент:
    Canvas -> Canvas Page URL
    Canvas -> Canvas Callback URL
    Connect -> Connect URL:
    А то что-то потыкался и ничего не пашет.

    Кстати, в исходниках отсутствует FacebookTester.as , в общем смысл всей статьи рушиться.

Leave a comment

You must be logged in to post a comment.