Вы можете использовать сервисы Google Play Games для входа игроков в игру для Android, созданную на Firebase и Unity. Чтобы использовать сервисы Google Play Games для входа с помощью Firebase, сначала войдите в проигрыватель с помощью Google Play Games и запросите при этом код аутентификации OAuth 2.0. Затем передайте код авторизации в PlayGamesAuthProvider
, чтобы сгенерировать учетные данные Firebase, которые можно использовать для аутентификации в Firebase.
Прежде чем вы начнете
Настройте свой проект Unity
Добавьте файл конфигурации Firebase и SDK Firebase Unity в свой проект Unity, как описано в разделе Добавление Firebase в ваш проект Unity . Следуйте инструкциям для Android.
Обязательно импортируйте
FirebaseAuth.unitypackage
.В редакторе Unity в разделе «Настройки сборки» > «Настройки проигрывателя» > «Другие настройки» задайте имя пакета Android для вашей игры.
Затем в разделе Build Settings > Player Settings > Publishing Settings выберите или создайте хранилище ключей и ключ, который будет использоваться для подписи вашего пакета Android. Чтобы вход в Play Игры работал, ваш APK должен быть подписан — это требование применяется не только для публикации, но и во время разработки вашей игры.
Настройте свой проект Firebase
В консоли Firebase перейдите в проект Firebase, в котором вы зарегистрировали свой проект Unity.
Установите отпечаток 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 должен быть подписан этим ключом, в том числе во время разработки.
Включите Google Play Games в качестве поставщика услуг входа:
В консоли Firebase откройте раздел Аутентификация .
Сгенерируйте и получите идентификатор клиента веб-сервера вашего проекта и секрет клиента:
На вкладке «Метод входа» включите поставщика услуг входа Google .
Скопируйте идентификатор клиента веб-сервера и секрет от поставщика услуг входа Google .
На вкладке «Метод входа» включите поставщика входа в Play Games и укажите идентификатор клиента веб-сервера вашего проекта и секрет клиента, которые вы получили на последнем шаге.
Настройте службы Play Games с информацией о вашем приложении Firebase.
В консоли Google Play откройте свое приложение Google Play или создайте его.
В разделе «Расширение» нажмите «Игровые сервисы» > «Настройка и управление» > «Конфигурация» .
Нажмите Да, моя игра уже использует Google API , выберите свой проект Firebase из списка и нажмите Использовать .
На странице конфигурации сервисов Play Games нажмите Добавить учетные данные .
- Выберите тип игрового сервера .
- В поле клиента OAuth выберите идентификатор веб-клиента вашего проекта. Убедитесь, что это тот же идентификатор клиента, который вы указали при включении входа в Play Игры.
- Сохраните изменения.
По-прежнему на странице конфигурации сервисов Play Games еще раз нажмите «Добавить учетные данные» .
- Выберите тип Android .
- В поле клиента OAuth выберите идентификатор клиента Android вашего проекта. (Если вы не видите свой идентификатор клиента Android, убедитесь, что вы установили отпечаток SHA-1 своей игры в консоли Firebase.)
- Сохраните изменения.
На страницах «События » , «Достижения » и «Списки лидеров» создайте любые ресурсы 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>
На странице тестировщиков добавьте адреса электронной почты всех пользователей, которым необходимо иметь возможность войти в вашу игру, прежде чем она будет выпущена в магазине Play.
Интегрируйте функцию входа в Play Games в свою игру
Загрузите последний выпуск плагина Play Games для Unity и извлеките его.
Импортируйте пакет Unity плагина в свой проект Unity. Вы можете найти пакет Unity в каталоге
current-build
архива выпуска.Настройте плагин Play Games:
- Нажмите «Окно» > «Google Play Игры» > «Настройка» > «Настройка Android» , чтобы открыть экран конфигурации Android .
- Вставьте фрагмент ресурсов Android, полученный из консоли Play, в поле «Определение ресурсов» .
- Вставьте идентификатор клиента веб-сервера, который вы указали при включении входа в Play Games в консоли Firebase, в поле «Идентификатор клиента» .
- Щелкните Настройка .
В своей игре настройте клиент 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();
Затем, когда игрок решит войти в Play Games, вызовите
Social.localUser.Authenticate()
:Social.localUser.Authenticate((bool success) => { // handle success or failure });
Авторизоваться с помощью Firebase
После того как вы добавите в игру функцию входа в Play Игры, вы сможете использовать код авторизации из сервисов Play Игр для аутентификации в Firebase.
После того, как игрок успешно войдет в систему с помощью Play Games, в обработчике продолжения входа получите код авторизации для учетной записи игрока:
Social.localUser.Authenticate((bool success) => { if (success) { authCode = PlayGamesPlatform.Instance.GetServerAuthCode(); } });
Затем замените код авторизации из сервисов Play Games на учетные данные Firebase и используйте учетные данные Firebase для аутентификации игрока:
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance; Firebase.Auth.Credential credential = Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); });
Следующие шаги
После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя, которая привязывается к его идентификатору Play Games. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя во всех приложениях вашего проекта.
В вашей игре вы можете получить UID пользователя Firebase из объекта Firebase.Auth.FirebaseUser
:
Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
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();