FirebaseUI to biblioteka utworzona oprócz pakietu SDK Uwierzytelniania Firebase, który udostępnia przepływy w interfejsie użytkownika, w aplikacji. FirebaseUI zapewnia następujące korzyści:
- Wielu dostawców – procesy logowania za pomocą adresu e-mail i hasła, linku do e-maila i numeru telefonu uwierzytelnianie, logowanie przez Google, logowanie do Facebooka, logowanie do Twittera i logowanie przez GitHuba.
- Zarządzanie kontem – procesy zarządzania kontem, takie jak: tworzenia kont i resetowania haseł.
- Łączenie kont – umożliwia bezpieczne łączenie kont użytkowników na różnych tożsamościach. dostawców usług.
- Uaktualnienie anonimowych użytkowników – proces bezpiecznego uaktualniania anonimowych użytkowników.
- Motywy niestandardowe – dostosuj wygląd FirebaseUI do swojej aplikacji. Oprócz tego: Ponieważ FirebaseUI to oprogramowanie typu open source, możesz utworzyć rozwidlenie projektu i go dostosować aby dostosować je do swoich potrzeb.
- Smart Lock na hasła – automatyczna integracja z Smart Lock na hasła i logowanie się na różnych urządzeniach.
Zanim zaczniesz
Jeśli jeszcze nie masz tego za sobą, dodaj Firebase do swojego projektu na Androida.
Dodaj zależności dla FirebaseUI do pliku
build.gradle
na poziomie aplikacji. Jeśli chcesz umożliwić logowanie się przez Facebooka lub Twittera, umieść także Pakiety SDK dla 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 ma pośrednie zależności od pakietu SDK Firebase oraz pakiet SDK Usług Google Play.
W konsoli Firebase otwórz sekcję Uwierzytelnianie i włącz metod logowania, które chcesz obsługiwać. Niektóre metody logowania wymagają dodatkowe informacje, zwykle dostępne u dewelopera usługi. konsoli.
Jeśli masz włączone Logowanie przez Google:
Gdy w konsoli pojawi się odpowiedni komunikat, pobierz zaktualizowany plik konfiguracyjny Firebase. (
google-services.json
), która zawiera teraz informacje o kliencie OAuth wymagane do zalogowania się przez Google.Przenieś ten zaktualizowany plik konfiguracyjny do projektu Android Studio, zastępując nieaktualny odpowiedni plik konfiguracyjny. (Przeczytaj artykuł Dodawanie Firebase do projektu na Androida).
Jeśli odcisk cyfrowy SHA aplikacji nie został jeszcze określony, zrób to Strona Ustawienia konsoli Firebase. Przeczytaj artykuł Uwierzytelnianie klienta. , aby dowiedzieć się, jak pobrać odcisk cyfrowy SHA aplikacji.
Jeśli obsługujesz logowanie się za pomocą Facebooka lub Twittera, dodaj zasoby ciągu znaków do
strings.xml
, które określają informacje identyfikacyjne wymagane przez każdy z nich dostawca:<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 FirebaseUI
Umowa dotycząca wyniku aktywności:
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 się w FirebaseUI, utwórz intencję logowania za pomocą preferowane metody 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);
Gdy się zalogujesz, 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 linku w e-mailu
W konsoli Firebase otwórz sekcję Uwierzytelnianie. Dzień kartę Metoda logowania, włącz dostawcę E-mail/hasło. Notatka że logowanie za pomocą adresu e-mail za pomocą linku wymaga włączenia logowania za pomocą adresu e-mail i hasła.
W tej samej sekcji włącz logowanie się przy użyciu opcji Link w e-mailu (logowanie bez hasła). i kliknij Zapisz.
Aby korzystać z logowania się za pomocą linku e-mail, musisz też włączyć Linki dynamiczne Firebase. W FirebaseKonsola, kliknij Linki dynamiczne w sekcji Zaangażowanie na pasku nawigacyjnym. Kliknij Pierwsze kroki i dodawanie domeny. Wybrana domena zostanie wymieniona w e-mailu wysyłanych do użytkowników.
Możesz włączyć logowanie przy użyciu linku w e-mailach w FirebaseUI, wywołując funkcję
enableEmailLinkSignIn
wEmailBuilder
instancję. Musisz też podać prawidłowy obiektActionCodeSettings
z WartośćsetHandleCodeInApp
ma wartość Prawda. Dodatkowo musisz umieścić na białej liście adres URL, do którego przekazujesz wiadomościsetUrl
. 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 zobaczyć link w ramach konkretnego działania, wykonaj te czynności: tutaj. W przeciwnym razie link będzie przekierowują do Twojej aktywności w programie uruchamiającym.
Gdy złapiesz precyzyjny link, musisz wywołać funkcję potwierdzenia, że możemy się tym zająć. Jeśli prześlij nam go za pomocą usługi
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); } }
Opcjonalnie Logowanie e-mailem za pomocą linku na innym urządzeniu jest obsługiwane, co oznacza, że link wysłany przez aplikacja na Androida może być używana do logowania się w internecie lub aplikacjach Apple. Domyślnie obsługa wielu urządzeń jest włączona. Aby je wyłączyć, wywołaj
setForceSameDevice
w instancjiEmailBuilder
.Zobacz FirebaseUI-Web. i FirebaseUI-iOS .
Wyloguj się
FirebaseUI udostępnia wygodne metody wylogowywania się z Uwierzytelniania Firebase 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 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) { // ... } });
Dostosowywanie
Domyślnie FirebaseUI do tworzenia motywów używa AppCompat, co oznacza, że
zastosuj schemat kolorów Twojej aplikacji. Jeśli potrzebujesz dalszego dostosowania,
przekaż 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ż określić 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
- Więcej informacji o używaniu i dostosowywaniu FirebaseUI znajdziesz README znajdziesz w serwisie GitHub.
- Jeśli znajdziesz problem w FirebaseUI i chcesz go zgłosić, skorzystaj z Narzędzie do śledzenia błędów GitHub.