Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Аутентификация в Unity с помощью игровых сервисов Google Play

Вы можете использовать сервисы Google Play Games для входа игроков в игру для Android, созданную на Firebase и Unity. Чтобы использовать сервисы Google Play Games, войдите в систему с помощью Firebase, сначала войдите в проигрыватель с помощью Google Play Games и при этом запросите код аутентификации OAuth 2.0. Затем передайте код аутентификации в PlayGamesAuthProvider для создания Firebase верительных, который можно использовать для проверки подлинности Firebase.

Прежде чем вы начнете

Настроить Unity

  1. Добавить конфигурационный файл Firebase и Unity SDK Firebase для вашего проекта Unity , как описано в Add Firebase для вашего проекта Unity . Следуйте инструкциям для Android.

    Обязательно импортировать FirebaseAuth.unitypackage .

  2. В редакторе Unity, в разделе Настройки сборки> Настройки игрока> Другие настройки установить имя Android пакета вашей игры.

  3. Затем, в разделе Настройки сборки> Настройки> Настройки игрока Паблишинг, выбрать или создать хранилище ключей и ключ, который будет использоваться для подписи Android пакета. Ваш APK должен быть подписан, чтобы вход в Play Games работал - это требование применяется не только для публикации, но и во время разработки игры.

Настройте свой проект Firebase

  1. В Firebase консоли перейдите к проекту Firebase , в котором вы зарегистрировали свой проект Unity.

  2. Установка вашей игры SHA-1 отпечаток от настроек страницы Firebase консоли, используя ключ, установленный в Unity.

    Вы можете получить SHA-1 отпечаток ключа с keytool командой:

    keytool -exportcert -list -v \
        -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE

    Кроме того , вы можете получить SHA хэш вашего сертификата подписи с Gradle signingReport команды:

    gradlew signingReport

    Ваш APK должен быть подписан этим ключом, в том числе во время разработки.

  3. Включите Google Play Games в качестве поставщика услуг входа:

    1. Найдите идентификатор клиента веб-сервера и секрет клиента. Идентификатор клиента веб-сервера идентифицирует ваш проект Firebase для серверов аутентификации Google Play.

      Чтобы найти эти значения:

      1. Откройте проект Firebase в консоли Google API , стр мандатной.
      2. В ИД клиента разделе OAuth 2.0, откройте веб - клиент (авто , созданный Google Service) Детали страницы. На этой странице перечислены идентификатор клиента и секрет вашего веб-сервера.
    2. Затем в консоли Firebase , откройте раздел Проверка подлинности.

    3. На вкладке Входа в методе, включите вход в Play Игры провайдера. Вам нужно будет указать идентификатор клиента веб-сервера вашего проекта и секрет клиента, которые вы получили из консоли API.

  1. В консоли Play Google , откройте приложение или создать.

  2. В разделе Grow, нажмите Play Игры Услуги> Настройка & Management> Конфигурация.

  3. Нажмите кнопку Да, моя игра уже использует Google API , выберите имя вашего проекта Firebase из списка и нажмите Использовать.

  4. На странице конфигурации игры Услуги Play, нажмите кнопку Добавить Credential.

    1. Выберите тип игрового сервера.
    2. В поле клиента OAuth, выберите веб - идентификатор клиента вашего проекта. Убедитесь, что это тот же идентификатор клиента, который вы указали при включении входа в Play Игры.
    3. Сохраните изменения.
  5. Тем не менее на странице конфигурации игры Услуги Play, нажмите кнопку Добавить Credential снова.

    1. Выберите Android тип.
    2. В поле клиента OAuth, выберите Android идентификатор клиента вашего проекта. (Если вы не видите свой идентификатор клиента Android, убедитесь, что вы установили отпечаток SHA-1 вашей игры в консоли Firebase.)
    3. Сохраните изменения.
  6. На события, достижения и страниц РЕЙТИНГИ, создавать Play Игры ресурсы , которые вы хотите использовать в вашей игре (если вы не хотите , чтобы немедленно использовать любой, вы можете создать запись заполнитель). Затем, на любое из событий, достижений, или страницы РЕЙТИНГИ, нажмите кнопку Получить ресурсы и скопировать Android ресурсы фрагмент кода где - то удобно. Этот фрагмент потребуется для настройки плагина Google Play Games Services.

    Фрагмент ресурсов выглядит как в следующем примере:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    Google Play game services IDs.
    Save this file as res/values/games-ids.xml in your project.
    -->
    <resources>
      <!-- app_id -->
      <string name="app_id" translatable="false">123456789000</string>
      <!-- package_name -->
      <string name="package_name" translatable="false">com.example.game</string>
      <!-- event Wiped Raid -->
      <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string>
    </resources>
    
  7. На странице тестировщиков, добавьте адреса электронной почты всех пользователей , которые должны быть в состоянии войти в вашу игру , прежде чем выпустить его на Play магазине.

Интегрируйте вход в Play Игры в свою игру

  1. Загрузите последнюю версию из Play Games плагин для Unity и извлечь его.

  2. Импортируйте пакет Unity плагина в свой проект Unity. Вы можете найти пакет Unity в current-build каталога архива выпуска.

  3. Настройте плагин Play Games:

    1. Нажмите Окно> Google Play Игры> Настройка> Android Setup , чтобы открыть экран Android конфигурации.
    2. Вставить в Android ресурсы фрагмент кода вы получили от Play консоли в поле Определение ресурсов.
    3. Вставьте ваш идентификатор клиента веб - сервера, который вы указали при включении Играть в игры входа в консоли Firebase, в поле Client ID.
    4. Нажмите Setup.
  4. В вашей игре, настроить клиент играть в игры с RequestServerAuthCode включена настройка:

    using GooglePlayGames;
    using GooglePlayGames.BasicApi;
    using UnityEngine.SocialPlatforms;
    using System.Threading.Tasks;
    
    PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
        .RequestServerAuthCode(false /* Don't force refresh */)
        .Build();
    
    PlayGamesPlatform.InitializeInstance(config);
    PlayGamesPlatform.Activate();
    
  5. Затем, когда игрок выбирает , чтобы войти в Play Игры, вызов Social.localUser.Authenticate() :

    Social.localUser.Authenticate((bool success) => {
      // handle success or failure
    });
    

Аутентифицироваться с Firebase

После добавления входа в Play Games в свою игру вы можете использовать код аутентификации из сервисов Play Games для аутентификации в Firebase.

  1. После того, как игрок успешно вошел в систему с помощью Play Games, в обработчике продолжения входа получите код авторизации для учетной записи игрока:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. Затем замените код аутентификации из сервисов Play Games на учетные данные Firebase и используйте учетные данные Firebase для аутентификации игрока:

    Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
    Firebase.Auth.Credential credential =
        Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

Следующие шаги

После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя, привязанная к его идентификатору Play Games. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя в каждом приложении в вашем проекте.

В вашей игре, вы можете получить пользователь Firebase UID из Firebase.Auth.FirebaseUser объекта:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  string playerName = user.DisplayName;

  // The user's Id, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server, if you
  // have one; use User.TokenAsync() instead.
  string uid = user.UserId;
}

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

Чтобы получить информацию об игроке в Play Играх пользователя или получить доступ к сервисам Play Games, используйте API, предоставляемые плагином Play Games.

Чтобы выйти пользователь, вызовите SignOut() :

auth.SignOut();