Możesz zezwolić użytkownikom na uwierzytelnianie w Firebase za pomocą kont Google.
Zanim zaczniesz
- Jeśli nie korzystasz jeszcze z Firebase, dodaj tę usługę do projektu aplikacji na Androida. 
- W pliku Gradle na poziomie modułu (aplikacji) (zwykle - <project>/<app-module>/build.gradle.ktslub- <project>/<app-module>/build.gradle) dodaj zależność z biblioteką Firebase Authentication na Androida. Zalecamy używanie symbolu Firebase Android BoM do kontrolowania wersji biblioteki.- W ramach konfiguracji Firebase Authentication musisz też dodać do aplikacji pakiet SDK Credential Manager. - 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") }- Gdy korzystamy z Firebase Android BoM, aplikacja zawsze używa zgodnych wersji bibliotek Firebase na Androida. - (Alternatywnie) Dodaj zależności biblioteki Firebase bez użycia BoM - Jeśli nie chcesz używać Firebase BoM, musisz określić wersję każdej biblioteki Firebase w wierszu zależności. - Pamiętaj, że jeśli w aplikacji używasz kilku bibliotek Firebase, zdecydowanie zalecamy używanie BoM do zarządzania wersjami bibliotek, co zapewnia zgodność wszystkich wersji. - 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") }
- Jeśli nie masz jeszcze określonego odcisku SHA aplikacji, zrób to na stronie Ustawienia w konsoli Firebase. Szczegółowe informacje o tym, jak uzyskać odcisk SHA aplikacji, znajdziesz w artykule Uwierzytelnianie klienta. 
- Włącz Google jako metodę logowania w Firebasekonsoli:- W Firebasekonsoli otwórz sekcję Uwierzytelnianie.
- Na karcie Metoda logowania włącz metodę logowania Google i kliknij Zapisz.
 
- Gdy pojawi się odpowiedni komunikat w konsoli, pobierz zaktualizowany plik konfiguracyjny Firebase ( - google-services.json), który zawiera teraz informacje o kliencie OAuth wymagane do logowania przez Google.
- Przenieś zaktualizowany plik konfiguracyjny do projektu w Android Studio, zastępując nim nieaktualny plik konfiguracyjny. (Patrz Dodawanie Firebase do projektu na Androida). 
Uwierzytelnianie za pomocą Firebase
- Zintegruj logowanie przez Google z aplikacją, wykonując czynności opisane w dokumentacji Menedżera danych logowania. Oto ogólne instrukcje:- Utwórz instancję prośby o zalogowanie się przez Google za pomocą funkcji GetGoogleIdOption. Następnie utwórz żądanie Credential Manager za pomocą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(); W powyższym żądaniu musisz przekazać identyfikator klienta „serwera” do metody setServerClientId. Aby znaleźć identyfikator klienta OAuth 2.0:- Otwórz stronę danych logowania w konsoli Google Cloud.
- Identyfikator klienta typu Aplikacja internetowa to identyfikator klienta OAuth 2.0 serwera backendu.
 
- Sprawdź, czy po zintegrowaniu logowania przez Google aktywność logowania zawiera kod podobny do tego:
        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!"); } } 
 
- Utwórz instancję prośby o zalogowanie się przez Google za pomocą funkcji 
- W metodzie onCreateaktywności logowania uzyskaj udostępnioną instancję obiektuFirebaseAuth:Kotlinprivate lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth Javaprivate FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance(); 
- Podczas inicjowania aktywności sprawdź, czy użytkownik jest obecnie zalogowany:
    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); } 
- Teraz pobierz token identyfikatora Google użytkownika utworzony w kroku 1, wymień go na dane logowania Firebase i uwierzytelnij się w Firebase za pomocą tych danych:
    Jeśli wywołanieKotlinprivate 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); } }); } signInWithCredentialsię powiedzie, możesz użyć metodygetCurrentUser, aby uzyskać dane konta użytkownika.
Dalsze kroki
Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i powiązane z danymi logowania, czyli nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania, za pomocą których użytkownik się zalogował. Nowe konto jest przechowywane w projekcie Firebase i może służyć do identyfikowania użytkownika we wszystkich aplikacjach w projekcie, niezależnie od sposobu logowania.
- W aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z obiektu - FirebaseUser. Zobacz Zarządzanie użytkownikami.
- W Firebase Realtime Database i Cloud Storage regułach bezpieczeństwa możesz pobrać unikalny identyfikator zalogowanego użytkownika ze zmiennej - authi użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.
Możesz zezwolić użytkownikom na logowanie się w aplikacji za pomocą wielu dostawców uwierzytelniania, łącząc dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika.
Aby wylogować użytkownika, wywołaj funkcję 
signOut. Musisz też wyczyścić stan bieżących danych logowania użytkownika u wszystkich dostawców danych logowania, zgodnie z zaleceniami zawartymi w dokumentacji Menedżera danych logowania:
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()); } }); }