
FirebaseUI to biblioteka oparta na pakiecie SDK uwierzytelniania Firebase, która udostępnia gotowe przepływy interfejsu do użycia w aplikacji. FirebaseUI zapewnia te korzyści:
- Wielu dostawców – procesy logowania za pomocą adresu e-mail i hasła, linku w e-mailu, uwierzytelniania telefonicznego, logowania przez Google, Facebooka, Twittera i GitHub.
- Zarządzanie kontem – przepływy do obsługi zadań związanych z zarządzaniem kontem, takich jak tworzenie konta i resetowanie hasła.
- Łączenie kont – procesy bezpiecznego łączenia kont użytkowników u różnych dostawców tożsamości.
- Uaktualnianie użytkowników anonimowych – przepływy bezpiecznego uaktualniania użytkowników anonimowych.
- Własne motywy – dostosuj wygląd FirebaseUI do swojej aplikacji. Ponadto, ponieważ FirebaseUI jest projektem open source, możesz go rozwidlić i dostosować do swoich potrzeb.
- Menedżer danych logowania – automatyczna integracja z Menedżerem danych logowania umożliwiająca szybkie logowanie na różnych urządzeniach.
Zanim zaczniesz
Jeśli nie korzystasz jeszcze z Firebase, dodaj tę usługę do projektu aplikacji na Androida.
Dodaj zależności FirebaseUI do pliku
build.gradle(.kts)na poziomie aplikacji. Jeśli chcesz obsługiwać logowanie za pomocą Facebooka lub Twittera, uwzględnij też pakiety SDK Facebooka i Twittera:dependencies { // ... implementation("com.firebaseui:firebase-ui-auth:9.0.0") // Required only if Facebook login support is required // Find the latest Facebook SDK releases here: https://goo.gl/Ce5L94 implementation("com.facebook.android:facebook-android-sdk:8.x") }Pakiet SDK FirebaseUI Auth ma zależności przechodnie od pakietu SDK Firebase i pakietu SDK Usług Google Play.
W konsoli Firebase otwórz Bezpieczeństwo > Uwierzytelnianie.
Na karcie Metoda logowania włącz dostawców logowania, których chcesz obsługiwać. Niektórzy dostawcy logowania wymagają dodatkowych informacji, które zwykle są dostępne w konsoli dewelopera usługi.
Jeśli włączysz Logowanie przez Google:
Zaktualizuj plik konfiguracyjny Firebase.
Gdy w konsoli Firebase pojawi się odpowiedni komunikat, 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 Android Studio, zastępując nim nieaktualny plik konfiguracyjny. (Patrz Dodawanie Firebase do projektu aplikacji na Androida).
Określ odcisk cyfrowy SHA-1 aplikacji, jeśli nie zostało to jeszcze zrobione.
W konsoli Firebase otwórz
Ustawienia > kartę Ogólne.Przewiń w dół do karty Twoje aplikacje, wybierz aplikację na Androida i dodaj odcisk cyfrowy SHA-1 w polu Odciski cyfrowe certyfikatu SHA.
Więcej informacji o tym, jak uzyskać odcisk cyfrowy SHA aplikacji, znajdziesz w sekcji Uwierzytelnianie klienta.
Jeśli obsługujesz logowanie za pomocą Facebooka lub Twittera, dodaj do
strings.xmlzasoby tekstowe, które określają informacje umożliwiające identyfikację wymagane przez każdego dostawcę:<resources> <!-- Facebook application ID and custom URL scheme (app ID prefixed by 'fb'). --> <string name="facebook_application_id" translatable="false">YOUR_APP_ID</string> <string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_APP_ID</string> </resources>
Zaloguj się
Utwórz ActivityResultLauncher, który rejestruje wywołanie zwrotne dla kontraktu wyniku działania FirebaseUI:
Kotlin
// See: https://developer.android.com/training/basics/intents/result private val signInLauncher = registerForActivityResult( FirebaseAuthUIActivityResultContract(), ) { res -> this.onSignInResult(res) }
Java
// See: https://developer.android.com/training/basics/intents/result private final ActivityResultLauncher<Intent> signInLauncher = registerForActivityResult( new FirebaseAuthUIActivityResultContract(), new ActivityResultCallback<FirebaseAuthUIAuthenticationResult>() { @Override public void onActivityResult(FirebaseAuthUIAuthenticationResult result) { onSignInResult(result); } } );
Aby rozpocząć proces logowania w FirebaseUI, utwórz intencję logowania z wybranymi metodami logowania:
Kotlin
// Choose authentication providers val providers = arrayListOf( AuthUI.IdpConfig.EmailBuilder().build(), AuthUI.IdpConfig.PhoneBuilder().build(), AuthUI.IdpConfig.GoogleBuilder().build(), AuthUI.IdpConfig.FacebookBuilder().build(), AuthUI.IdpConfig.TwitterBuilder().build(), ) // Create and launch sign-in intent val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent)
Java
// Choose authentication providers List<AuthUI.IdpConfig> providers = Arrays.asList( new AuthUI.IdpConfig.EmailBuilder().build(), new AuthUI.IdpConfig.PhoneBuilder().build(), new AuthUI.IdpConfig.GoogleBuilder().build(), new AuthUI.IdpConfig.FacebookBuilder().build(), new AuthUI.IdpConfig.TwitterBuilder().build()); // Create and launch sign-in intent Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent);
Po zakończeniu procesu logowania otrzymasz wynik w onSignInResult:
Kotlin
private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) { val response = result.idpResponse if (result.resultCode == RESULT_OK) { // Successfully signed in val user = FirebaseAuth.getInstance().currentUser // ... } else { // Sign in failed. If response is null the user canceled the // sign-in flow using the back button. Otherwise check // response.getError().getErrorCode() and handle the error. // ... } }
Java
private void onSignInResult(FirebaseAuthUIAuthenticationResult result) { IdpResponse response = result.getIdpResponse(); if (result.getResultCode() == RESULT_OK) { // Successfully signed in FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); // ... } else { // Sign in failed. If response is null the user canceled the // sign-in flow using the back button. Otherwise check // response.getError().getErrorCode() and handle the error. // ... } }
Konfigurowanie metod logowania
Uwierzytelnianie za pomocą linku w e-mailu
W konsoli Firebase otwórz Zabezpieczenia > Uwierzytelnianie.
Na karcie Metoda logowania włącz metodę logowania E-mail/hasło. Pamiętaj, że aby korzystać z logowania za pomocą linku w e-mailu, musisz włączyć logowanie za pomocą adresu e-mail i hasła.
W tej samej sekcji włącz metodę logowania Link w e-mailu (logowanie bez hasła) i kliknij Zapisz.
Aby korzystać z logowania za pomocą linku w e-mailu, musisz też włączyć Firebase Dynamic Links:
W konsoli Firebase otwórz DevOps i zaangażowanie > Dynamiczne linki.
Kliknij Rozpocznij, a następnie dodaj domenę. Wybrana tutaj domena będzie widoczna w linkach w e-mailach wysyłanych do użytkowników.
Aby włączyć logowanie za pomocą linku w e-mailu w FirebaseUI, wywołaj funkcję
enableEmailLinkSignInna instancjiEmailBuilder. Musisz też podać prawidłowyActionCodeSettingsobiekt z wartościąsetHandleCodeInAppustawioną na true.Dodatkowo musisz dodać do białej listy adres URL przekazywany do funkcji
setUrl:W konsoli Firebase otwórz kartę Zabezpieczenia > Uwierzytelnianie > Ustawienia.
W sekcji Autoryzowane domeny kliknij Dodaj domenę i dodaj swoją domenę.
Kotlin
val actionCodeSettings = ActionCodeSettings.newBuilder() .setAndroidPackageName( // yourPackageName= "...", // installIfNotAvailable= true, // minimumVersion= null, ) .setHandleCodeInApp(true) // This must be set to true .setUrl("https://google.com") // This URL needs to be whitelisted .build() val providers = listOf( EmailBuilder() .enableEmailLinkSignIn() .setActionCodeSettings(actionCodeSettings) .build(), ) val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent)
Java
ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder() .setAndroidPackageName( /* yourPackageName= */ "...", /* installIfNotAvailable= */ true, /* minimumVersion= */ null) .setHandleCodeInApp(true) // This must be set to true .setUrl("https://google.com") // This URL needs to be whitelisted .build(); List<AuthUI.IdpConfig> providers = Arrays.asList( new AuthUI.IdpConfig.EmailBuilder() .enableEmailLinkSignIn() .setActionCodeSettings(actionCodeSettings) .build() ); Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent);
Jeśli chcesz przechwycić link w konkretnej aktywności, wykonaj czynności opisane tutaj. W przeciwnym razie link przekieruje do aktywności programu uruchamiającego.
Gdy przechwycisz precyzyjny link, musisz wywołać weryfikację, abyśmy mogli go obsłużyć. Jeśli to możliwe, musisz przesłać nam ten dokument za pomocą
setEmailLink.Kotlin
if (AuthUI.canHandleIntent(intent)) { val extras = intent.extras ?: return val link = extras.getString("email_link_sign_in") if (link != null) { val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setEmailLink(link) .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent) } }
Java
if (AuthUI.canHandleIntent(getIntent())) { if (getIntent().getExtras() == null) { return; } String link = getIntent().getExtras().getString("email_link_sign_in"); if (link != null) { Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setEmailLink(link) .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent); } }
Opcjonalnie: obsługiwane jest logowanie za pomocą linku w e-mailu na różnych urządzeniach, co oznacza, że link wysłany przez aplikację na Androida może być używany do logowania się w aplikacjach internetowych lub na urządzenia Apple. Domyślnie obsługa wielu urządzeń jest włączona. Możesz ją wyłączyć, wywołując
setForceSameDevicena instancjiEmailBuilder.Więcej informacji znajdziesz w FirebaseUI-Web i FirebaseUI-iOS.
Wyloguj się
FirebaseUI udostępnia wygodne metody wylogowywania się z usługi Uwierzytelnianie Firebase, a także ze wszystkich dostawców tożsamości społecznościowych:
Kotlin
AuthUI.getInstance() .signOut(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .signOut(this) .addOnCompleteListener(new OnCompleteListener<Void>() { public void onComplete(@NonNull Task<Void> task) { // ... } });
Możesz też całkowicie usunąć konto użytkownika:
Kotlin
AuthUI.getInstance() .delete(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .delete(this) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { // ... } });
Dostosowywanie
Domyślnie FirebaseUI używa AppCompat do określania motywu, co oznacza, że naturalnie przyjmie schemat kolorów Twojej aplikacji. Jeśli potrzebujesz dalszej personalizacji, możesz przekazać motyw i logo do narzędzia do tworzenia logowania Intent:
Kotlin
val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.my_great_logo) // Set logo drawable .setTheme(R.style.MySuperAppTheme) // Set theme .build() signInLauncher.launch(signInIntent)
Java
Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.my_great_logo) // Set logo drawable .setTheme(R.style.MySuperAppTheme) // Set theme .build(); signInLauncher.launch(signInIntent);
Możesz też ustawić niestandardową politykę prywatności i warunki korzystania z usługi:
Kotlin
val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setTosAndPrivacyPolicyUrls( "https://example.com/terms.html", "https://example.com/privacy.html", ) .build() signInLauncher.launch(signInIntent)
Java
Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setTosAndPrivacyPolicyUrls( "https://example.com/terms.html", "https://example.com/privacy.html") .build(); signInLauncher.launch(signInIntent);
Następne kroki
- Więcej informacji o korzystaniu z FirebaseUI i dostosowywaniu tej biblioteki znajdziesz w pliku README w GitHubie.
- Jeśli znajdziesz problem w FirebaseUI i chcesz go zgłosić, skorzystaj z narzędzia do rejestrowania problemów na GitHubie.