FirebaseUI to biblioteka zbudowana na bazie pakietu SDK Firebase Authentication, która zapewnia przepływy interfejsu użytkownika do wykorzystania 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 telefonicznego, logowania Google, logowania do Facebooka, logowania do Twittera i logowania do GitHub.
- Zarządzanie kontem - przepływy obsługujące zadania związane z zarządzaniem kontem, takie jak tworzenie konta i resetowanie haseł.
- Łączenie kont — przepływy umożliwiające bezpieczne łączenie kont użytkowników u różnych dostawców tożsamości.
- Aktualizacja anonimowego użytkownika — przepływy umożliwiające bezpieczne uaktualnianie anonimowych użytkowników.
- Motywy niestandardowe — dostosuj wygląd FirebaseUI do swojej aplikacji. Ponadto, ponieważ FirebaseUI jest oprogramowaniem typu open source, możesz rozwidlić projekt i dostosować go dokładnie do swoich potrzeb.
- Smart Lock for Passwords – automatyczna integracja z 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 pakiety 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' }
Zestaw SDK FirebaseUI Auth ma przechodnie zależności od zestawu SDK Firebase i zestawu 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 Google:
Gdy w konsoli pojawi się monit, pobierz zaktualizowany plik konfiguracyjny Firebase (
google-services.json
), który zawiera teraz informacje o kliencie OAuth wymagane do logowania się w Google.Przenieś ten zaktualizowany plik konfiguracyjny do projektu Android Studio, zastępując przestarzały odpowiedni plik konfiguracyjny. (Zobacz Dodawanie Firebase do projektu na Androida .)
Jeśli nie określiłeś jeszcze odcisku palca SHA swojej aplikacji, zrób to na stronie Ustawienia w konsoli Firebase. Aby uzyskać szczegółowe informacje na temat uzyskiwania odcisku palca SHA aplikacji, zobacz Uwierzytelnianie klienta .
Jeśli obsługujesz logowanie za pomocą Facebooka lub Twittera, dodaj zasoby ciągów do
strings.xml
, które określają informacje identyfikacyjne 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 wyników 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 FirebaseUI, utwórz zamiar logowania, korzystając z 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 aby móc logować się za pomocą łącza e-mail, musi być włączone logowanie za pomocą adresu e-mail/hasła.
W tej samej sekcji włącz metodę logowania za pomocą łącza e-mail (logowanie bez hasła) i kliknij Zapisz .
Będziesz także musiał włączyć Linki dynamiczne Firebase, aby móc logować się za pomocą łącza e-mail. W konsoli Firebase kliknij Linki dynamiczne w obszarze Angażuj na pasku nawigacyjnym. Kliknij Pierwsze kroki i dodaj domenę. Domena, którą tu wybierzesz, będzie widoczna w linkach e-mail wysyłanych do Twoich użytkowników.
Możesz włączyć logowanie za pomocą łącza e-mail w FirebaseUI, wywołując metodę
enableEmailLinkSignIn
w instancjiEmailBuilder
. Konieczne będzie także podanie prawidłowego obiektuActionCodeSettings
z ustawioną wartościąsetHandleCodeInApp
na true. Dodatkowo musisz dodać do białej listy adres URL przekazywany dosetUrl
, co można zrobić w konsoli Firebase , w obszarze Uwierzytelnianie -> Metody logowania -> Autoryzowane domeny.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 konkretnym działaniu, wykonaj czynności opisane tutaj . W przeciwnym razie link przekieruje do Twojej aktywności w programie uruchamiającym.
Po złapaniu głębokiego linku musisz zadzwonić i sprawdzić, czy możemy się tym zająć. Jeśli możemy, musisz nam to przekazać 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 na różnych urządzeniach, co oznacza, że łącza wysłanego za pośrednictwem aplikacji na Androida można używać do logowania się w Internecie lub aplikacjach Apple. Domyślnie obsługa wielu urządzeń jest włączona. Możesz to wyłączyć, wywołując
setForceSameDevice
w instancjiEmailBuilder
.Aby uzyskać więcej informacji, zobacz FirebaseUI-Web i FirebaseUI-iOS .
Wyloguj się
FirebaseUI zapewnia wygodne metody wylogowywania się z uwierzytelniania Firebase, a także ze 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 dalszego dostosowania, możesz przekazać motyw i logo do kreatora 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ć niestandardową politykę prywatności i warunki świadczenia usług:
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
- Więcej informacji na temat używania i dostosowywania FirebaseUI można znaleźć w pliku README w serwisie GitHub.
- Jeśli znajdziesz problem w FirebaseUI i chcesz go zgłosić, skorzystaj z narzędzia do śledzenia problemów GitHub .