Вы можете использовать сервисы 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 в разделе Build Settings > Player Settings > Other Settings укажите имя пакета Android для вашей игры.
Затем в разделе «Настройки сборки» > «Настройки плеера» > «Настройки публикации» выберите или создайте хранилище ключей и ключ, которые будут использоваться для подписи вашего Android-пакета. Ваш APK-файл должен быть подписан, чтобы работала авторизация в Play Games — это требование действует не только при публикации, но и во время разработки вашей игры.
Настройте свой проект Firebase.
В консоли Firebase перейдите к проекту Firebase, в котором вы зарегистрировали свой проект Unity.
Укажите SHA-1-отпечаток вашей игры.
В консоли Firebase перейдите в...
> Вкладка «Общие» . Прокрутите вниз до карточки «Ваши приложения» , выберите свое приложение для Android и добавьте отпечаток SHA-1 в поле «Отпечатки сертификатов SHA» .
Получить отпечаток SHA-1 вашего ключа можно с помощью команды
keytool:keytool -exportcert -list -v \ -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTOREВ качестве альтернативы, вы можете получить хеш SHA вашего сертификата подписи с помощью команды gradle
signingReport:gradlew signingReport
Подробную информацию о том, как получить SHA-отпечаток вашего приложения, см. в разделе «Аутентификация клиента» .
Ваш APK-файл должен быть подписан этим ключом, в том числе и на этапе разработки.
Включите Google Play Games в качестве способа авторизации:
В консоли Firebase перейдите в раздел Безопасность > Аутентификация .
Сгенерируйте и получите идентификатор клиента веб-сервера и секретный ключ клиента для вашего проекта:
На вкладке «Способ входа» включите поставщика услуг входа Google .
Скопируйте идентификатор клиента веб-сервера и секретный ключ из сервиса авторизации Google .
На вкладке «Метод входа» включите поставщика авторизации Play Games и укажите идентификатор клиента веб-сервера вашего проекта и секретный ключ клиента, которые вы получили на предыдущем шаге.
Настройте Play Games services используя информацию о вашем приложении Firebase.
В консоли Google Play откройте своё приложение Google Play или создайте новое.
В разделе «Развитие» нажмите Play Games services > «Настройка и управление» > «Конфигурация» .
Нажмите «Да, моя игра уже использует API Google» , выберите свой проект Firebase из списка, а затем нажмите « Использовать» .
На странице настроек Play Games services нажмите «Добавить учетные данные» .
- Выберите тип игрового сервера .
- В поле «Клиент OAuth» выберите идентификатор веб-клиента вашего проекта. Убедитесь, что это тот же идентификатор клиента, который вы указали при включении входа Play Games .
- Сохраните изменения.
Оставаясь на странице настроек Play Games services , снова нажмите «Добавить учетные данные» .
- Выберите тип Android .
- В поле «Клиент OAuth» выберите идентификатор клиента Android вашего проекта. (Если вы не видите свой идентификатор клиента Android, убедитесь, что вы указали отпечаток SHA-1 вашей игры в консоли Firebase .)
- Сохраните изменения.
На страницах «События» , «Достижения» и «Таблицы лидеров» создайте любые ресурсы Play Games которые вы хотите использовать со своей игрой (если вы не хотите использовать их сразу, вы можете создать запись-заполнитель). Затем на любой из страниц «События» , «Достижения» или «Таблицы лидеров» нажмите «Получить ресурсы» и скопируйте фрагмент кода ресурсов 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>На странице «Тестировщики» добавьте адреса электронной почты всех пользователей, которым необходимо войти в вашу игру перед её выпуском в Play Store .
Интегрируйте вход в Play Games в свою игру.
Загрузите последнюю версию плагина Play Games для Unity и распакуйте её.
Импортируйте пакет Unity для плагина в свой проект Unity. Пакет Unity можно найти в каталоге
current-buildархива релиза.Настройте плагин Play Games:
- Чтобы открыть экран настройки Android , нажмите Window > Google Play Games > Setup > Android Setup .
- Вставьте фрагмент кода ресурсов 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 Games в вашу игру вы сможете использовать код авторизации из сервисов Play Games для аутентификации в Firebase.
После успешного входа игрока в систему через Play Games, в обработчике продолжения входа в систему получите код авторизации для учетной записи игрока:
Social.localUser.Authenticate((bool success) => { if (success) { authCode = PlayGamesPlatform.Instance.GetServerAuthCode(); } });Затем обменяйте код авторизации из сервисов Play Games на учетные данные 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();