Вход через Facebook для устройств

Если вам нужна справка по Facebook Portal, посетите Справочный центр Portal.

Ввести код Facebook для устройств для входа в Smart TV, камеру, принтер или другие устройства можно на этой странице.

Интегрируйте вход через Facebook для устройств, чтобы люди могли войти в ваше приложение или сервис через свой аккаунт Facebook. Поддерживаются устройства с ограниченными возможностями для отображения или ввода данных, например Smart TV, цифровые фоторамки и устройства Интернета вещей.

При входе с устройства на экране появится буквенно-цифровой код, который пользователь должен будет ввести со своего ПК или смартфона на определенной веб-странице. Затем у пользователя приложения или службы запрашиваются разрешения. Как только приложение получит разрешения, устройству будет передан маркер доступа. Он будет использоваться в запросах API Graph для идентификации пользователя и получения информации, которая поможет сделать работу с приложением более удобной для этого человека.

Если вы разрабатываете приложение для Apple TV, Android TV или Fire TV, необходимо использовать Facebook SDK для tvOS или Facebook SDK для Android.

В данном руководстве описывается интеграция входа для устройства вручную без использования этих SDK.

Интерфейс пользователя

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

1. Призыв к действию

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

Чтобы обеспечить удобную, согласованную и надежную работу с приложением, создайте кнопку, максимально похожую на оригинальную кнопку "Вход через Facebook".

Это означает следующее:

  1. На кнопке должна быть надпись "Вход через Facebook" или "Подключиться к Facebook".
  2. Используйте белый цвет и фирменный оттенок синего Facebook: #1877F2.
  3. Если устройство поддерживает вывод графической информации, к кнопке можно добавить официальный логотип в виде буквы f. Согласно требованиям руководства по бренду Facebook, для логотипа нужно всегда использовать два цвета: белый и фирменный оттенок синего Facebook (#1877F2).

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

2. Отображение кода

При нажатии призыва к действию устройство отправляет вызов API Facebook, который в ответ возвращает код.

Вы должны уведомить человека о том, что ему нужно перейти на определенный веб-сайт и ввести код. Используйте для этого следующее сообщение: «Откройте страницу facebook.com/device (http://facebook.com/device) с вашего устройства или телефона и введите этот код». Покажите код, полученный от API Device Login Facebook, полностью. Код состоит из 6–12 символов.

Рядом можно разместить кнопку Close или Cancel, позволяющую отменить вход для устройства. В этом случае нужно вернуть человека к начальному экрану входа.

Когда на экране отображается код, ваше устройство опрашивает API Device Login, чтобы узнать, авторизовался ли пользователь в приложении. Если код не ввести в течение нескольких минут, API Device Login вернет ошибку code_expired. Получив ее, устройство должно отменить процесс входа и вновь вывести на экран призыв к действию.

Можно также генерировать QR-коды с кодом пользователя в URL. Для этого в URL нужно добавить параметр user_code:

https://www.facebook.com/device?user_code=<USER_CODE>

3. Авторизация

Это то, что люди видят в браузере компьютера или мобильного устройства при переходе на страницу facebook.com/device. Сначала отображается текстовое поле, в которое нужно ввести код.

После ввода кода и нажатия кнопки Continue человек может выбрать разрешения, которые он готов предоставить приложению:

Если вход выполнен успешно, появится подтверждающее сообщение:

4. Подтверждение успешного входа

В интерфейсе устройства должно отображаться сообщение с подтверждением. В идеале оно должно включать имя пользователя и фото его профиля Facebook, если оно доступно.

Подтверждение должно отображаться на экране устройства, пока человек не нажмет кнопку Continue. Иногда человек вводит код с компьютера, расположенного в другом месте, и ему требуется время, чтобы вернуться к своему устройству и увидеть подтверждение, прежде чем продолжить работу.

После нажатия кнопки Continue на вашем устройстве должна создаваться персональная, удобная для пользователя рабочая среда.

5. Выход или отключение

Люди должны иметь возможность выйти с вашего устройства, после чего данные о подключении к Facebook должны быть удалены. Для этого предусмотрите в меню устройства пункт Log out from Facebook или Disconnect from Facebook.

Если человек выберет этот пункт, устройство должно удалить из своей памяти сохраненный маркер доступа. Необходимо также удалить и маркер доступа, хранящийся в базе данных или в облачном хранилище, если он есть. Чтобы аннулировать маркер доступа, вызов API не требуется.

После выхода из приложения устройство должно снова вывести на экран призыв к действию из Шага 1.

Реализация входа для устройств

«Вход через Facebook» предназначен для устройств, отправляющих прямые запросы HTTP через Интернет. Ниже показаны вызовы API и отклики, доступные для устройства.

1. Активация входа для устройств

Откройте Панель приложений и установите для параметра "Вход с устройств" (раздел "Продукт" > "Вход через Facebook" > "Настройки") значение "Да".

2. Генерация кода

Если пользователь нажимает призыв к действию Connect to Facebook или Log in with Facebook, устройство должно отправить запрос HTTP POST:

POST https://graph.facebook.com/v2.6/device/login
       access_token=<YOUR_APP_ID|CLIENT_TOKEN>
       scope=<COMMA_SEPARATED_PERMISSION_NAMES> // e.g. public_profile,user_likes
       redirect_uri=<VALID_OAUTH_REDIRECT_URL>

Параметр scope необязателен и должен содержать разделенный запятыми список разрешений входа, одобренных к использованию по результатам Проверки входа.

Чтобы найти CLIENT_TOKEN, откройте "Настройки приложения" -> "Дополнительно". Этот маркер нужно объединить с ID приложения (разделив символом |) и сформировать таким образом access_token.

redirect_uri — необязательный параметр. Если вы указываете URL, человек перенаправляется на него после успешного входа. Это позволяет человеку войти на веб-сайт вашего приложения, и вы сможете управлять его аккаунтом. Этот URL должен быть действительным URL перенаправления OAuth, как настроено в разделе «Настройки приложения -> Дополнительно». Ответ выглядит так:

{
  "code": "92a2b2e351f2b0b3503b2de251132f47",
  "user_code": "A1NWZ9",
  "verification_uri": "https://www.facebook.com/device",
  "expires_in": 420,
  "interval": 5
}

Этот ответ означает следующее:

  1. Вывести на экран устройства строку «A1NWZ9».
  2. Предложить человеку перейти на facebook.com/device и ввести этот код.
  3. Код действует 420 секунд. Если маркер доступа не получен до конца этого срока, процесс входа необходимо отменить.
  4. Ваше устройство должно опрашивать API Device Login каждые 5 секунд, чтобы узнать, выполнен ли вход.

3. Отображение кода

Ваше устройство должно показать user_code и предложить человеку открыть на своем компьютере или смартфоне указанный verification_uri, например facebook.com/device. См. раздел Пользовательский интерфейс.

4. Опрос для авторизации

Чтобы узнать о состоянии авторизации, ваше устройство должно опрашивать API Device Login. Это необходимо делать с интервалом, который определяется значением interval в отклике на вызов, отправленный на шаге 1. Он составляет 5 секунд. Опрос выглядит так:

POST https://graph.facebook.com/v2.6/device/login_status
       access_token=<YOUR_APP_ID|CLIENT_TOKEN>
       code=<LONG_CODE_FROM_STEP_1> // e.g. "92a2b2e351f2b0b3503b2de251132f47"

Ответ на этот вызов API зависит от того, на каком этапе получения разрешения находится пользователь. Вы получите маркер доступа или объект ошибки с определенным подкодом для анализа:

Подкод ошибки Пример отклика Значение

N/A

{"access_token": "ABCD...", "expires_in" : 5183996 }

Пользователь успешно авторизовался на устройстве. Устройство теперь может использовать значение access_token для отправки авторизованных вызовов API.

1349174

{"error":{"message":"This request requires the user to take a pending action","code":31,"error_subcode":1349174,"error_user_title":"Device Login Authorization Pending","error_user_msg":"User has not yet authorized your application. Continue polling."}}

Пользователь ещё не авторизован в приложении. Продолжайте опрос (его частота определяется откликом с шага 1).

1349172

{"error":{"message":"User request limit reached","code":17,"error_subcode":1349172,"error_user_title":"OAuth Device Excessive Polling","error_user_msg":"Your device is polling too frequently. Space your requests with a minium interval of 5 seconds."}}

Устройство проводит опрос слишком часто. Увеличьте интервал опроса согласно значению, указанному в первом вызове API.

1349152

{"error":{"message":"The session has expired""code":463,"error_subcode":1349152, "error_user_title":"Activation Code Expired","error_user_msg":"The code you entered has expired. Please go back to your device for a new code and try again."}}

Срок действия кода устройства истек. Отмените процесс входа с устройства и верните пользователя в начальное окно.

5. Подтверждение успешного входа

Получение маркера доступа означает, что человек успешно авторизован в приложении. Этот маркер необходимо сохранить на устройстве.

Чтобы подтвердить успешный вход, до нажатия кнопки Continue приложение должно показывать на устройстве имя и фото профиля человека (если оно доступно). Чтобы получить имя и фото профиля, устройство должно отправить стандартный вызов API Graph:

GET https://graph.facebook.com/v2.3/me?
      fields=name,picture&amp;
      access_token=<USER_ACCESS_TOKEN>

Ответ будет выглядеть так:

{
  "name": "John Doe", 
  "picture": {
    "data": {
      "is_silhouette": false, 
      "url": "https://fbcdn.akamaihd.net/hmac...ile.jpg"
    }
  }, 
  "id": "2023462875238472"
}

Имя и фото профиля человека должны отображаться, пока он не нажмет кнопку Continue на устройстве.

6. Сохранение маркеров доступа

Ваше устройство должно сохранять маркер доступа, чтобы использовать его в запросах к API Graph.

Маркеры доступа для входа с устройства действуют до 60 дней, но в некоторых случаях они могут быть аннулированы. Например, если пароль Facebook изменяется, маркер доступа становится недействительным.

Если маркер недействителен, ваше устройство должно удалить его из памяти. Чтобы получить новый, действующий маркер, человек, использующий ваше устройство, должен снова выполнить вход с устройства, начиная с Шага 1.

Устранение неполадок

Можно ли выполнять запросы к устройству через HTTP?
Для OAuth 2 необходим протокол TLS/HTTPS.

Можно ли выполнять запросы к устройству с помощью метода GET?
К устройствам необходимо отправлять запросы POST.

Как обновить маркер доступа для входа для устройства?
Маркеры доступа для входа для устройства действуют до 60 дней.

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

Подробнее об обновлении маркеров см. в разделе Маркеры доступа.

При отправке запроса POST выдается ошибка Invalid API method. В чем дело?
При отправке запроса POST выдается ошибка:

{"error":{"message":"Invalid API method","type":"OAuthException","code":3}}

Скорее всего, в приложении нужно активировать вход с устройств.

Откройте Панель приложений и установите для параметра "Вход с устройств" (раздел "Продукт" > "Вход через Facebook" > "Настройки") значение "Да".

Мой маркер доступа для входа для устройства недействителен. Что делать?
Если маркер недействителен, ваше устройство должно удалить его из памяти и получить новый. Чтобы получить новый, действительный маркер, человек, использующий ваше устройство, должен вновь выполнить вход для устройства, начиная с шага 1.