Вы можете разрешить пользователям проходить аутентификацию в Firebase с помощью аккаунтов Google, интегрировав в приложение функцию входа через Google.
Подготовка
Как настроить проект Unity
Чтобы использовать Firebase Authentication, необходимо:
Зарегистрируйте проект Unity и настройте его для использования Firebase.
Если в проекте уже используется Firebase, можете пропустить этот шаг.
Если у вас нет проекта Unity, вы можете скачать пример приложения.
Добавьте в свой проект Unity Firebase Unity SDK (в частности,
FirebaseAuth.unitypackage).
Обратите внимание, что для добавления Firebase в проект Unity нужно выполнить действия как в консоли Firebase, так и в вашем открытом проекте Unity. Например, вам потребуется скачать файлы конфигурации Firebase из консоли, а затем переместить их в проект Unity.
Как настроить проект Firebase и учетные данные
Android. Укажите цифровой отпечаток SHA-1 приложения в консоли Firebase.
- В консоли Firebase выберите
Settings (Настройки) > General (Общие). Перейдите к карточке Ваши приложения, выберите приложение для Android и добавьте цифровой отпечаток SHA-1 в поле Цифровые отпечатки сертификата SHA.
Чтобы получить цифровой отпечаток SHA-1 хранилища ключей, используйте
keytool:keytool -keystore path-to-keystore.keystore -list -vПодробнее о том, как получить цифровой отпечаток SHA приложения, читайте в разделе об аутентификации клиентов.
- В консоли Firebase выберите
Включите вход с аккаунтом Google и скопируйте идентификатор веб-клиента:
- В консоли Firebase выберите Безопасность > Аутентификация.
- На вкладке Sign-in method (Способ входа) включите поставщика аутентификации Google.
- Разверните раздел Конфигурация Web SDK и скопируйте идентификатор веб-клиента (например,
123456-abc.apps.googleusercontent.com). Он представляет собой утверждение аудитории (aud) ваших токенов идентификации и требуется как для Android, так и для iOS. - Нажмите Сохранить.
Обновите файлы конфигурации Firebase и скопируйте обратный идентификатор клиента iOS:
- Скачайте последние файлы конфигурации Firebase из консоли Firebase (
для Android иgoogle-services.json для iOS) и замените ими старые копии в проекте Unity. Подробнее о том, как добавить Firebase в проект Unity…GoogleService-Info.plist - iOS. Откройте файл
и скопируйте значение ключаGoogleService-Info.plist REVERSED_CLIENT_ID(например,com.googleusercontent.apps.12345-abc). Это значение необходимо для настройки схемы URL перенаправления iOS.
- Скачайте последние файлы конфигурации Firebase из консоли Firebase (
Интегрируйте плагин входа с аккаунтом Google в проект Unity
Импортируйте плагин:
- Если вы интегрируете плагин в существующий проект, создайте резервную копию проекта и удалите все старые плагины входа с аккаунтом Google, прежде чем продолжить.
- Скачайте
GoogleSignInNative.unitypackageиз GitHub и импортируйте его в проект Unity (Assets > Import Package > Custom Package). Убедитесь, что выбраны все файлы, и нажмите Импортировать.
Задайте настройки плагина:
- В Unity Editor выберите Window (Окно) > Google Sign-In Native (Вход с аккаунтом Google) > Settings (Настройки).
- Вставьте идентификатор веб-клиента в первое поле.
- Вставьте обратный идентификатор клиента iOS во второе поле.
- Нажмите Save Settings (Сохранить настройки).
Разрешите нативные зависимости:
- Выберите Assets (Объекты) > External Dependency Manager (Менеджер внешних зависимостей) > Android Resolver (Разрешение зависимостей Android) > Force Resolve (Принудительное разрешение).
- Дождитесь сообщения об успешном завершении. Будут скачаны нативные библиотеки
googleidиandroidxМенеджера учетных данных.
Доступ к курсу "Firebase.Auth.FirebaseAuth"
Класс FirebaseAuth является шлюзом для всех вызовов API.
Доступ к нему можно получить через FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Как выполнить аутентификацию с помощью Firebase
Настройте
GoogleSignInManagerв сцене:- Создайте пустой объект
GameObjectв начальной сцене и назовите егоGoogleSignInManager. - Прикрепите к нему скрипт
GoogleSignInManager.cs. - Перетащите объект
GoogleSignInNativeSettings(находится вAssets/GoogleSignInNative/Resources) в слот Sign In Settings (Настройки входа) в скрипте.
- Создайте пустой объект
Активируйте вход с аккаунтом Google и обменяйте токен идентификатора на учетные данные Firebase:
Создайте скрипт контроллера, который подписывается на
GoogleSignInManager.OnSignInCompletedиGoogleSignInManager.OnSignInFailed, запускает вход с помощьюGoogleSignInManager.Instance.StartSignIn()и обменивает полученный токен идентификатора Google на учетные данные Firebase с помощьюGoogleAuthProvider.GetCredential:using Firebase.Auth; using Firebase.Extensions; using UnityEngine; public class MyAuthController : MonoBehaviour { private FirebaseAuth auth; private void Awake() { auth = FirebaseAuth.DefaultInstance; } private void OnEnable() { GoogleSignInManager.OnSignInCompleted += HandleSignInSuccess; GoogleSignInManager.OnSignInFailed += HandleSignInFailure; } private void OnDisable() { GoogleSignInManager.OnSignInCompleted -= HandleSignInSuccess; GoogleSignInManager.OnSignInFailed -= HandleSignInFailure; } public void OnSignInButtonClick() { GoogleSignInManager.Instance.StartSignIn(); } private void HandleSignInSuccess(string idToken) { Debug.Log("[Auth] Google Sign-In succeeded. Authenticating with Firebase..."); Credential credential = GoogleAuthProvider.GetCredential(idToken, null); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWithOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); }); } private void HandleSignInFailure(string error) { Debug.LogError($"[Auth] Google Sign-In failed: {error}"); } }
Создайте приложение
Android
- Убедитесь, что название пакета в настройках проигрывателя точно совпадает с учетными данными OAuth в Firebase и Google Cloud.
- Убедитесь, что для параметра Minimum API Level (Минимальный уровень API) задано значение 34 или выше.
- Нажмите Build and Run (Собрать и запустить).
iOS
- Создайте проект в Unity, чтобы сгенерировать проект Xcode, а затем откройте созданный файл
.xcworkspace. - В Xcode перейдите на вкладку Signing & Capabilities (Подписи и возможности) и выберите Development Team (Команда разработчиков).
- Плагин автоматически добавляет специальную схему URL (
REVERSED_CLIENT_ID) в проект Xcode. Выполните сборку и запуск на физическом устройстве.
Дальнейшие действия
После первого входа пользователя создается новый аккаунт, который связывается с учетными данными, то есть именем пользователя и паролем, номером телефона или информацией от поставщика аутентификации, с помощью которых пользователь вошел в систему. Этот новый аккаунт сохраняется в проекте Firebase и может использоваться для идентификации пользователя во всех приложениях проекта, независимо от того, как пользователь входит в систему.
-
В своих приложениях вы можете получить основную информацию профиля пользователя из объекта
Firebase.Auth.FirebaseUser:Firebase.Auth.FirebaseUser user = auth.CurrentUser; if (user != null) { string name = user.DisplayName; string email = user.Email; System.Uri photo_url = user.PhotoUrl; // 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и использовать его, чтобы управлять доступом к данным.
Вы можете разрешить пользователям входить в приложение с помощью нескольких поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующим аккаунтом пользователя.
Чтобы выполнить выход пользователя, вызовите
SignOut():
auth.SignOut();