Вход для игр на Facebook

The Web Games on Facebook and Facebook Gameroom platforms are no longer available for new submissions. This documentation is intended solely for developers with existing games. To learn more, read our blog post.

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

Следовательно, вам следует встроить в свою игру Вход через Facebook, поскольку так вы сможете получить ID пользователей, синхронизировать их игровой процесс, а также интегрировать социальные функции, нужные игрокам. Если ваша игра поддерживается на нескольких платформа, вы сможете использовать один и тот же ID, чтобы синхронизировать игровой процесс вне зависимости от используемых устройств.

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

Источники авторизации

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

Авторизация в Центре приложений

Когда люди запускают вашу игру с помощью кнопки Играть в Центре приложений, они предоставляют ряд разрешений, указанных на вкладке с информацией о приложении.

Кнопка "Играть" в Центре приложений

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

Подробнее см. в руководстве по Центру приложений.

Авторизация на другой платформе

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

Определение статуса входа

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

Определить, выполнял ли игрок вход в приложение раньше, можно одним из двух способов:

  • На стороне клиента с помощью метода JS SDK FB.getLoginStatus()
  • На стороне сервера путем декодирования signed_request

Использование Facebook SDK для JavaScript

Чтобы игрок мог сразу выполнить вход при загрузке игры, вызовите FB.getLoginStatus() при загрузке документа. После этого можно использовать FB.api() для получения доступа к состоянию игры через ID пользователя, а также к персональной информации, такой как имя, фото профиля и список друзей игрока.

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    // the user is logged in and has authenticated your
    // app, and response.authResponse supplies
    // the user's ID, a valid access token, a signed
    // request, and the time the access token 
    // and signed request each expire
    var uid = response.authResponse.userID;
    var accessToken = response.authResponse.accessToken;
  } else if (response.status === 'not_authorized') {
    // the user is logged in to Facebook, 
    // but has not authenticated your app
  } else {
    // the user isn't logged in to Facebook.
  }
 }); 

Если игрок не выполнил вход, можно вызвать FB.login(...), чтобы отобразить модальную версию окна входа поверх начального экрана игры. Обратный вызов этого диалога должен использовать тот же метод, с помощью которого вы вызвали FB.getLoginStatus.

Использование подписанного запроса

Когда игра загрузится на Facebook.com, на указанный URL веб-игр Facebook будет выполнен запрос HTTP POST. Этот запрос POST будет содержать некоторые параметры, включая signed_request, который можно использовать для авторизации.

Параметр signed_request имеет кодировку base64url и подписан с использованием версии HMAC вашего секрета приложения на основе спецификации OAuth 2.0.

Это означает, что когда параметр размещается в вашем приложении через запрос POST, перед использованием его нужно проанализировать и проверить. Для этого выполните следующие действия:

  1. Разделите подписанный запрос на две части точкой (.) (например: 238fsdfsd.oijdoifjsidf899)
  2. Декодируйте первую часть — закодированную подпись — из base64url.
  3. Декодируйте вторую часть — полезную нагрузку — из base64url, а затем декодируйте полученный объект JSON.

Эти шаги можно выполнить на любом современном языке программирования. Ниже приведен пример на PHP.

function parse_signed_request($signed_request) {
  list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

  $secret = "appsecret"; // Use your app secret here

  // decode the data
  $sig = base64_url_decode($encoded_sig);
  $data = json_decode(base64_url_decode($payload), true);

  // confirm the signature
  $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
  if ($sig !== $expected_sig) {
    error_log('Bad Signed JSON signature!');
    return null;
  }

  return $data;
}

function base64_url_decode($input) {
  return base64_decode(strtr($input, '-_', '+/'));
}

При этом будет создан объект JSON, который выглядит примерно так:

{
   "oauth_token": "{user-access-token}",
   "algorithm": "HMAC-SHA256",
   "expires": 1291840400,
   "issued_at": 1291836800,
   "user_id": "218471"
}

Чтобы узнать, авторизован ли текущий игрок в вашей игре, проанализируйте параметр signed_request. Если авторизация выполнена, параметр signed_request будет содержать ID пользователя игрока, с помощью которого вы узнаете персональную информацию и статус в игре. Вы можете обменять этот параметр signed_request на маркер доступа и с его помощью получить более подробные персональные сведения через API Graph.

Первая авторизация

При первом запуске игры предложите игрокам окно "Вход", чтобы они выполнили авторизацию. Для авторизации мы рекомендуем использовать вход на стороне клиента через SDK Javascript. До и после появления окна входа разработчики могут показать рисунок из игры.

Игра Happy Acres, в которой используется индивидуально настроенный фон во время входа

Вход на стороне клиента через SDK для JavaScript

Только в играх на Facebook версия JavaScript окна "Вход" запускается в режиме async в iframe. Это означает, что оно появляется в виде модального всплывающего окна поверх остального контента игры, а не как отдельное всплывающее окно в браузере.

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

В результате вы сможете использовать FB.getLoginStatus(), чтобы проверить, авторизовался ли игрок в вашем приложении ранее, и если нет, вызвать параметр FB.login(), чтобы сразу же отобразить окно "Вход" поверх контента игры, не показывая кнопку для входа.

См. пример ниже.

// Place following code after FB.init call.

function onLogin(response) {
  if (response.status == 'connected') {
    FB.api('/me?fields=first_name', function(data) {
      var welcomeBlock = document.getElementById('fb-welcome');
      welcomeBlock.innerHTML = 'Hello, ' + data.first_name + '!';
    });
  }
}

FB.getLoginStatus(function(response) {
  // Check login status on load, and if the user is
  // already logged in, go directly to the welcome message.
  if (response.status == 'connected') {
    onLogin(response);
  } else {
    // Otherwise, show Login dialog first.
    FB.login(function(response) {
      onLogin(response);
    }, {scope: 'email'});
  }
});

Дальнейшие действия

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

Вход — это первый шаг для доступа к важным социальным функциям, и вы можете создать их, используя следующие продукты:

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