Вы можете разрешить пользователям проходить аутентификацию в Firebase, используя свои учетные записи Google.
Прежде чем начать
- Если вы еще этого не сделали, добавьте Firebase в свой Android-проект . 
- В файле Gradle вашего модуля (уровня приложения) (обычно - <project>/<app-module>/build.gradle.ktsили- <project>/<app-module>/build.gradle) добавьте зависимость для библиотеки Firebase Authentication для Android. Мы рекомендуем использовать Firebase Android BoM для управления версиями библиотеки.- Кроме того, в рамках настройки Firebase Authentication вам необходимо добавить Credential Manager SDK в ваше приложение. - dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.4.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth") 
 // Also add the dependencies for the Credential Manager libraries and specify their versions implementation("androidx.credentials:credentials:1.3.0") implementation("androidx.credentials:credentials-play-services-auth:1.3.0") implementation("com.google.android.libraries.identity.googleid:googleid:1.1.1") }- Используя Firebase Android BoM , ваше приложение всегда будет использовать совместимые версии библиотек Firebase Android. - (Альтернатива) Добавьте зависимости библиотеки Firebase без использования BoM - Если вы решите не использовать Firebase BoM , вам необходимо указать каждую версию библиотеки Firebase в строке ее зависимостей. - Обратите внимание: если вы используете в своем приложении несколько библиотек Firebase, мы настоятельно рекомендуем использовать BoM для управления версиями библиотек, что гарантирует совместимость всех версий. - dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:24.0.1") 
 // Also add the dependencies for the Credential Manager libraries and specify their versions implementation("androidx.credentials:credentials:1.3.0") implementation("androidx.credentials:credentials-play-services-auth:1.3.0") implementation("com.google.android.libraries.identity.googleid:googleid:1.1.1") }
- Если вы ещё не указали SHA-отпечаток для своего приложения, сделайте это на странице настроек консоли Firebase . Подробнее о получении SHA-отпечатка для приложения см. в разделе «Аутентификация клиента» . 
-  Включите Google как способ входа в консоль Firebase :- В консоли Firebase откройте раздел «Аутентификация» .
- На вкладке «Способ входа» включите способ входа Google и нажмите «Сохранить» .
 
- При появлении соответствующего запроса в консоли загрузите обновленный файл конфигурации Firebase ( - google-services.json), который теперь содержит информацию о клиенте OAuth, необходимую для входа в Google.
- Переместите этот обновленный файл конфигурации в свой проект Android Studio, заменив соответствующий устаревший файл конфигурации. (См. раздел Добавление Firebase в свой проект Android .) 
Аутентификация с помощью Firebase
-  Интегрируйте функцию «Вход через Google» в своё приложение, следуя инструкциям из документации по Credential Manager . Ниже приведены общие инструкции:-  Создайте запрос на вход в Google с помощью GetGoogleIdOption. Затем создайте запрос Credential Manager с помощьюGetCredentialRequest:Kotlin// Instantiate a Google sign-in request val googleIdOption = GetGoogleIdOption.Builder() // Your server's client ID, not your Android client ID. .setServerClientId(getString(R.string.default_web_client_id)) // Only show accounts previously used to sign in. .setFilterByAuthorizedAccounts(true) .build() // Create the Credential Manager request val request = GetCredentialRequest.Builder() .addCredentialOption(googleIdOption) .build() Java// Instantiate a Google sign-in request GetGoogleIdOption googleIdOption = new GetGoogleIdOption.Builder() .setFilterByAuthorizedAccounts(true) .setServerClientId(getString(R.string.default_web_client_id)) .build(); // Create the Credential Manager request GetCredentialRequest request = new GetCredentialRequest.Builder() .addCredentialOption(googleIdOption) .build(); В запросе выше необходимо передать идентификатор клиента «сервера» методу setServerClientId. Чтобы узнать идентификатор клиента OAuth 2.0:- Откройте страницу «Учетные данные» в консоли Google Cloud .
- Идентификатор клиента типа веб-приложения — это идентификатор клиента OAuth 2.0 вашего внутреннего сервера.
 
-  Убедитесь, что после интеграции функции «Войти через Google» ваша активность входа содержит код, аналогичный следующему: Kotlinprivate fun handleSignIn(credential: Credential) { // Check if credential is of type Google ID if (credential is CustomCredential && credential.type == TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) { // Create Google ID Token val googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credential.data) // Sign in to Firebase with using the token firebaseAuthWithGoogle(googleIdTokenCredential.idToken) } else { Log.w(TAG, "Credential is not of type Google ID!") } } Javaprivate void handleSignIn(Credential credential) { // Check if credential is of type Google ID if (credential instanceof CustomCredential customCredential && credential.getType().equals(TYPE_GOOGLE_ID_TOKEN_CREDENTIAL)) { // Create Google ID Token Bundle credentialData = customCredential.getData(); GoogleIdTokenCredential googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credentialData); // Sign in to Firebase with using the token firebaseAuthWithGoogle(googleIdTokenCredential.getIdToken()); } else { Log.w(TAG, "Credential is not of type Google ID!"); } } 
 
-  Создайте запрос на вход в Google с помощью 
-  В методе onCreateдействия входа получите общий экземпляр объектаFirebaseAuth:Kotlinprivate lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth Javaprivate FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance(); 
-  При инициализации Activity проверьте, вошел ли пользователь в систему: Kotlinoverride fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) } Java@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); } 
-  Теперь получите токен Google ID пользователя, созданный на шаге 1, обменяйте его на учетные данные Firebase и выполните аутентификацию в Firebase, используя учетные данные Firebase: Если вызовKotlinprivate fun firebaseAuthWithGoogle(idToken: String) { val credential = GoogleAuthProvider.getCredential(idToken, null) auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user Log.w(TAG, "signInWithCredential:failure", task.exception) updateUI(null) } } } Javaprivate void firebaseAuthWithGoogle(String idToken) { AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, task -> { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user Log.w(TAG, "signInWithCredential:failure", task.getException()); updateUI(null); } }); } signInWithCredentialвыполнен успешно, вы можете использовать методgetCurrentUserдля получения данных учетной записи пользователя.
Следующие шаги
После первого входа пользователя в систему создаётся новая учётная запись, которая привязывается к учётным данным, использованным при входе (имя пользователя и пароль, номер телефона или информация о поставщике аутентификации). Эта новая учётная запись хранится в вашем проекте Firebase и может использоваться для идентификации пользователя в каждом приложении проекта, независимо от способа входа.
- В своих приложениях вы можете получить основную информацию о профиле пользователя из объекта - FirebaseUser. См. раздел Управление пользователями .
- В правилах безопасности Firebase Realtime Database и Cloud Storage вы можете получить уникальный идентификатор вошедшего в систему пользователя из переменной - authи использовать его для управления данными, к которым пользователь может получить доступ.
Вы можете разрешить пользователям входить в ваше приложение с использованием нескольких поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.
 Чтобы выйти из системы, вызовите signOut . Также необходимо очистить состояние текущих учётных данных пользователя у всех поставщиков учётных данных, как рекомендовано в документации по Credential Manager : 
Kotlin
private fun signOut() { // Firebase sign out auth.signOut() // When a user signs out, clear the current user credential state from all credential providers. lifecycleScope.launch { try { val clearRequest = ClearCredentialStateRequest() credentialManager.clearCredentialState(clearRequest) updateUI(null) } catch (e: ClearCredentialException) { Log.e(TAG, "Couldn't clear user credentials: ${e.localizedMessage}") } } }
Java
private void signOut() { // Firebase sign out mAuth.signOut(); // When a user signs out, clear the current user credential state from all credential providers. ClearCredentialStateRequest clearRequest = new ClearCredentialStateRequest(); credentialManager.clearCredentialStateAsync( clearRequest, new CancellationSignal(), Executors.newSingleThreadExecutor(), new CredentialManagerCallback<>() { @Override public void onResult(@NonNull Void result) { updateUI(null); } @Override public void onError(@NonNull ClearCredentialException e) { Log.e(TAG, "Couldn't clear user credentials: " + e.getLocalizedMessage()); } }); }