FirebaseUI to biblioteka zbudowana na pakiecie SDK uwierzytelniania Firebase, która udostępnia przepływy interfejsu użytkownika do użycia w Twojej aplikacji. FirebaseUI zapewnia następujące korzyści:
- Wielu dostawców — przepływy logowania dla adresu e-mail/hasła, łącza e-mail, uwierzytelniania telefonu, logowania Google, logowania do Facebooka, logowania do Twittera i logowania do GitHub.
- Zarządzanie kontami — przepływy do obsługi zadań zarządzania kontami, takich jak tworzenie kont i resetowanie haseł.
- Łączenie kont — przepływy w celu bezpiecznego łączenia kont użytkowników między dostawcami tożsamości.
- Uaktualnianie anonimowych użytkowników — przepływy w celu bezpiecznego uaktualniania anonimowych użytkowników.
- Niestandardowe motywy — dostosuj wygląd interfejsu FirebaseUI do swojej aplikacji. Ponadto, ponieważ FirebaseUI jest open source, możesz rozwidlić projekt i dostosować go dokładnie do swoich potrzeb.
- Smart Lock for Passwords — automatyczna integracja z funkcją Smart Lock for Passwords w celu szybkiego logowania na różnych urządzeniach.
Zanim zaczniesz
Jeśli jeszcze tego nie zrobiłeś, dodaj Firebase do swojego projektu na Androida .
Dodaj zależności FirebaseUI do pliku
build.gradle
na poziomie aplikacji. Jeśli chcesz obsługiwać logowanie za pomocą Facebooka lub Twittera, dołącz także zestawy SDK Facebooka i Twittera:dependencies { // ... implementation 'com.firebaseui:firebase-ui-auth:7.2.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 FirebaseUI Auth SDK ma przejściowe zależności od pakietu SDK Firebase i pakietu SDK usług Google Play.
W konsoli Firebase otwórz sekcję Uwierzytelnianie i włącz metody logowania, które chcesz obsługiwać. Niektóre metody logowania wymagają dodatkowych informacji, zwykle dostępnych w konsoli programisty usługi.
Jeśli włączyłeś Logowanie przez Google:
Po wyświetleniu monitu w konsoli pobierz zaktualizowany plik konfiguracyjny Firebase (
google-services.json
), który zawiera teraz informacje o kliencie OAuth wymagane do logowania się przez Google.Przenieś ten zaktualizowany plik konfiguracyjny do swojego projektu Android Studio, zastępując nieaktualny odpowiedni plik konfiguracyjny. (Zobacz Dodawanie Firebase do projektu na Androida .)
Jeśli jeszcze nie określiłeś odcisku cyfrowego SHA swojej aplikacji, zrób to na stronie Ustawienia w konsoli Firebase. Zobacz Uwierzytelnianie klienta , aby uzyskać szczegółowe informacje na temat uzyskiwania odcisku palca SHA aplikacji.
Jeśli obsługujesz logowanie za pomocą Facebooka lub Twittera, dodaj do pliku
strings.xml
zasoby ciągów, które określają informacje identyfikujące 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>
Zalogować się
Utwórz ActivityResultLauncher
, który rejestruje wywołanie zwrotne dla kontraktu wyniku działania FirebaseUI:
Kotlin+KTX
// 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 interfejsie FirebaseUI, utwórz intencję logowania przy użyciu preferowanych metod logowania:
Kotlin+KTX
// 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+KTX
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. // ... } }
Skonfiguruj metody logowania
Uwierzytelnianie łącza e-mail
W konsoli Firebase otwórz sekcję Uwierzytelnianie . Na karcie Metoda logowania włącz dostawcę adresu e-mail/hasła . Pamiętaj, że logowanie za pomocą adresu e-mail/hasła musi być włączone, aby można było korzystać z logowania za pomocą łącza e-mail.
W tej samej sekcji włącz metodę logowania przez łącze e-mail (logowanie bez hasła) i kliknij przycisk Zapisz .
Będziesz także musiał włączyć Linki dynamiczne Firebase, aby używać logowania za pomocą linku e-mail. W konsoli Firebase kliknij Linki dynamiczne w obszarze Zaangażuj na pasku nawigacyjnym. Kliknij Pierwsze kroki i dodaj domenę. Wybrana tutaj domena będzie odzwierciedlona w linkach e-mail wysyłanych do użytkowników.
Możesz włączyć logowanie za pomocą łącza e-mail w FirebaseUI, wywołując
enableEmailLinkSignIn
w instancjiEmailBuilder
. Będziesz także musiał podać prawidłowy obiektActionCodeSettings
zsetHandleCodeInApp
ustawionym na true. Dodatkowo musisz umieścić na białej liście adres URL, który przekazujesz dosetUrl
, co można zrobić w konsoli Firebase , w obszarze Uwierzytelnianie -> Metody logowania -> Domeny autoryzowane.Kotlin+KTX
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 złapać link w określonej czynności, wykonaj czynności opisane tutaj . W przeciwnym razie link przekieruje do Twojej aktywności w programie uruchamiającym.
Po złapaniu głębokiego linku będziesz musiał zadzwonić, aby sprawdzić, czy możemy to dla Ciebie zrobić. Jeśli możemy, musisz przekazać go nam za pomocą
setEmailLink
.Kotlin+KTX
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); } }
Obsługiwane jest opcjonalne logowanie za pomocą łącza e-mail z wielu urządzeń, co oznacza, że łącza wysłanego za pośrednictwem aplikacji na Androida można używać do logowania się w sieci lub aplikacjach Apple. Domyślnie obsługa wielu urządzeń jest włączona. Możesz go wyłączyć, wywołując metodę
setForceSameDevice
w instancjiEmailBuilder
.Zobacz FirebaseUI-Web i FirebaseUI-iOS, aby uzyskać więcej informacji.
Wyloguj się
FirebaseUI zapewnia wygodne metody wylogowywania się z Firebase Authentication, a także wszystkich dostawców tożsamości społecznościowych:
Kotlin+KTX
AuthUI.getInstance() .signOut(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .signOut(this) .addOnCompleteListener(new OnCompleteListener<Void>() { public void onComplete(@NonNull Task<Void> task) { // ... } });
Możesz także całkowicie usunąć konto użytkownika:
Kotlin+KTX
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 tworzenia motywów, co oznacza, że w naturalny sposób przyjmie schemat kolorów Twojej aplikacji. Jeśli potrzebujesz dalszych dostosowań, możesz przekazać motyw i logo do konstruktora Intent
logowania:
Kotlin+KTX
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 także ustawić własną politykę prywatności i warunki korzystania z usługi:
Kotlin+KTX
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
- Aby uzyskać więcej informacji na temat używania i dostosowywania interfejsu FirebaseUI, zobacz plik README w serwisie GitHub.
- Jeśli znajdziesz problem w FirebaseUI i chcesz go zgłosić, użyj narzędzia do śledzenia problemów GitHub .