FirebaseUI to biblioteka zbudowana na pakiecie SDK uwierzytelniania Firebase, która udostępnia w aplikacji procesy interfejsu użytkownika. FirebaseUI zapewnia następujące korzyści:
- Wielu dostawców – procesy logowania dla adresu e-mail i hasła, linku do adresu e-mail, uwierzytelniania przez telefon, logowania przez Google, logowania na Facebooku, logowania na Twitterze i logowania GitHuba.
- Zarządzanie kontem – umożliwia obsługę zadań związanych z zarządzaniem kontem, takich jak tworzenie konta i resetowanie haseł.
- Łączenie kont – to sposób na bezpieczne łączenie kont użytkowników z różnymi dostawcami tożsamości.
- Uaktualnianie anonimowych użytkowników – proces bezpiecznego uaktualniania anonimowych użytkowników.
- Motywy niestandardowe – dostosuj wygląd FirebaseUI do swojej aplikacji. Poza tym FirebaseUI to oprogramowanie open source, możesz więc utworzyć rozwidlenie projektu i dostosować go do swoich potrzeb.
- Smart Lock na hasła – automatyczna integracja z Smart Lock na hasła, aby szybko logować się na różnych urządzeniach.
Zanim zaczniesz
Dodaj Firebase do swojego projektu na Androida, jeśli jeszcze go nie masz.
Dodaj zależności dla FirebaseUI do pliku
build.gradle
na poziomie aplikacji. Jeśli chcesz obsługiwać logowanie się przez Facebooka i Twittera, dołącz też 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' }
Pakiet SDK uwierzytelniania FirebaseUI korzysta z przechodnich 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, które zwykle są dostępne w konsoli programisty usługi.
Jeśli masz włączone Logowanie przez Google:
Gdy w konsoli pojawi się odpowiedni komunikat, pobierz zaktualizowany plik konfiguracyjny Firebase (
google-services.json
), który zawiera teraz informacje o kliencie OAuth wymagane do zalogowania się przez Google.Przenieś ten zaktualizowany plik konfiguracji do projektu Android Studio, zastępując nieaktualny plik konfiguracji. (Przeczytaj artykuł Dodawanie Firebase do projektu na Androida).
Jeśli odcisk cyfrowy SHA aplikacji nie został jeszcze określony, możesz to zrobić na stronie Ustawienia w konsoli Firebase. Szczegółowe informacje o tym, jak pobrać odcisk cyfrowy SHA aplikacji, znajdziesz w sekcji Authenticating Your Client (Uwierzytelnianie klienta).
Jeśli obsługujesz logowanie się przez Facebooka lub Twittera, dodaj do
strings.xml
zasoby w postaci ciągu znaków, które określają dane 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>
Zaloguj się
Utwórz ActivityResultLauncher
, który rejestruje wywołanie zwrotne w związku z umową dotyczącą 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 uruchomić proces logowania się za pomocą FirebaseUI, utwórz intencję logowania za pomocą 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 aplikacji 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 linków e-mail
W konsoli Firebase otwórz sekcję Uwierzytelnianie. Na karcie Metoda logowania włącz dostawcę E-mail/hasło. Pamiętaj, że aby skorzystać z logowania się za pomocą linku w e-mailu, musisz włączyć logowanie się przy użyciu adresu e-mail lub hasła.
W tej samej sekcji włącz metodę logowania Link e-mail (logowanie bez hasła) i kliknij Zapisz.
Aby korzystać z logowania się za pomocą linku z e-maila, musisz też włączyć Linki dynamiczne Firebase. W konsoli Firebase w sekcji Zaangażowanie na pasku nawigacyjnym kliknij Linki dynamiczne. Kliknij Pierwsze kroki i dodaj domenę. Domena, którą tu wybierzesz, zostanie uwzględniona w linkach do e-maili wysyłanych do Twoich użytkowników.
Możesz włączyć logowanie w FirebaseUI przy użyciu linku e-mail, wywołując
enableEmailLinkSignIn
w instancjiEmailBuilder
. Musisz też podać prawidłowy obiektActionCodeSettings
z parametremsetHandleCodeInApp
ustawionym na wartość true. Musisz też dodać do białej listy adres URL przekazywany dosetUrl
. Możesz to zrobić w konsoli Firebase w sekcji 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 kliknąć link podczas konkretnego działania, wykonaj czynności opisane tutaj. W przeciwnym razie link przekieruje Cię do aktywności programu uruchamiającego.
Gdy znajdziesz precyzyjny link, musisz zadzwonić do nas, aby potwierdzić, że możemy go dla Ciebie obsłużyć. Jeśli to możliwe, przekaż nam je 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); } }
Opcjonalne Domyślnie włączona jest obsługa wielu urządzeń. Możesz go wyłączyć, wywołując
setForceSameDevice
w instancjiEmailBuilder
.Więcej informacji znajdziesz na stronach FirebaseUI-Web i FirebaseUI-iOS.
Wyloguj się
FirebaseUI udostępnia wygodne metody wylogowania 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 też 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) { // ... } });
Dostosowanie
Domyślnie FirebaseUI korzysta z AppCompat na potrzeby tworzenia motywów, co oznacza, że automatycznie 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 też ustawić niestandardową 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
- Więcej informacji o używaniu i dostosowywaniu FirebaseUI znajdziesz w README na GitHubie.
- Jeśli znajdziesz problem w FirebaseUI i chcesz go zgłosić, skorzystaj z narzędzia do śledzenia błędów na GitHubie.