Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Аутентификация в 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 и SDK Firebase Unity в свой проект Unity, как описано в разделе Добавление Firebase в ваш проект Unity . Следуйте инструкциям для Android.

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

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

  3. Затем в разделе Build Settings > Player Settings > Publishing Settings выберите или создайте хранилище ключей и ключ, который будет использоваться для подписи вашего пакета Android. Чтобы вход в Play Игры работал, ваш APK должен быть подписан — это требование применяется не только для публикации, но и во время разработки вашей игры.

Настройте свой проект 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) . На этой странице перечислены идентификатор клиента и секрет вашего веб-сервера.
    2. Затем в консоли Firebase откройте раздел Authentication .

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

Настройте службы Play Games с информацией о вашем приложении Firebase.

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

  2. В разделе «Расширение» нажмите «Игровые сервисы» > «Настройка и управление» > «Конфигурация» .

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

  4. На странице конфигурации сервисов Play Games нажмите Добавить учетные данные .

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

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

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

    <?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 Games в свою игру

  1. Загрузите последний выпуск плагина Play Games для Unity и извлеките его.

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

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

    1. Нажмите «Окно» > «Google Play Игры» > «Настройка» > «Настройка Android» , чтобы открыть экран конфигурации Android .
    2. Вставьте фрагмент ресурсов Android, полученный из консоли Play, в поле « Определение ресурсов ».
    3. Вставьте идентификатор клиента веб-сервера, который вы указали при включении входа в Play Games в консоли Firebase, в поле « Идентификатор клиента ».
    4. Щелкните Настройка .
  4. В своей игре настройте клиент Play Games с включенным параметром 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 Games, вызовите Social.localUser.Authenticate() :

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

Авторизоваться с помощью Firebase

После того как вы добавите в игру функцию входа в Play Игры, вы сможете использовать код авторизации из сервисов Play Игр для аутентификации в 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 и может использоваться для идентификации пользователя во всех приложениях вашего проекта.

В вашей игре вы можете получить UID пользователя Firebase из объекта 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 Realtime Database и Cloud Storage вы можете получить уникальный идентификатор вошедшего пользователя из переменной auth и использовать его для управления тем, к каким данным пользователь может получить доступ.

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

Чтобы выйти из системы, вызовите SignOut() :

auth.SignOut();