Łatwo dodawaj logowanie do aplikacji na Androida za pomocą FirebaseUI

FirebaseUI jest biblioteką zbudowany na szczycie Firebase Authentication SDK, który zapewnia drop-in UI płynie do wykorzystania w Twojej aplikacji. FirebaseUI zapewnia następujące korzyści:

  • Wielu dostawców - znak w przepływach na e-mail / hasło, odnośnik email, uwierzytelniania telefonu, Google Sign-In, Facebook Zaloguj się, Twittera Logowanie i GitHub zalogować.
  • Account Management - płynie do obsługi zadań zarządzania kontem, takie jak tworzenie konta i resetowania hasła.
  • Konto linkami - płynie bezpiecznie łączyć konta użytkownika w poprzek dostawców tożsamości.
  • Użytkownik anonimowy Uaktualnienie - przepływy bezpiecznej aktualizacji anonimowych.
  • Własne motywy - dostosować wygląd FirebaseUI pasujące swoją aplikację. Ponadto, ponieważ FirebaseUI jest oprogramowaniem typu open source, możesz rozwidlić projekt i dostosować go dokładnie do swoich potrzeb.
  • Smart Lock do haseł - automatyczna integracja ze Smart Lock do haseł na szybki cross-urządzenie logowania.

Zanim zaczniesz

  1. Jeśli tego nie zrobiłeś, dodaj Firebase do projektu Android .

  2. Dodaj zależności dla FirebaseUI do app poziomu build.gradle pliku. Jeśli chcesz obsługiwać logowanie za pomocą Facebooka lub Twittera, dołącz 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 FirebaseUI Auth SDK jest przechodnimi zależnościami od pakietu Firebase SDK i pakietu SDK usług Google Play.

  3. W konsoli Firebase otwórz sekcję Uwierzytelnianie i umożliwienia logowania metod chcesz wesprzeć. Niektóre metody logowania wymagają dodatkowych informacji, zwykle dostępnych w konsoli dewelopera usługi.

  4. Jeśli wsparcie logowania Google i nie zostały jeszcze określone swojej aplikacji SHA-1 odcisk palca, należy to zrobić ze strony Ustawienia konsoli Firebase. Zobacz Uwierzytelnianie Twojego klienta o sposobach na zdobycie aplikacji odcisk palca SHA-1.

  5. Jeśli wsparcie logowania z Facebook czy Twitter, dodać do zasobów ciągów strings.xml które określają informacje identyfikujące wymagane przez każdego operatora:

    
    <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ę

Załóż ActivityResultLauncher który rejestruje wywołania zwrotnego dla zamówienia wynik działalności FirebaseUI:

Jawa

// 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);
            }
        }
);

Kotlin+KTX

// See: https://developer.android.com/training/basics/intents/result
private val signInLauncher = registerForActivityResult(
        FirebaseAuthUIActivityResultContract()
) { res ->
    this.onSignInResult(res)
}

Aby rozpocząć proces logowania FirebaseUI, utwórz intencję logowania przy użyciu preferowanych metod logowania:

Jawa

// 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);

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)

Gdy znak w strumieniu jest zakończona, otrzymasz wynik w onSignInResult :

Jawa

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.
        // ...
    }
}

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.
        // ...
    }
}

Skonfiguruj metody logowania

  1. W konsoli Firebase otwórz sekcję uwierzytelniania. Na karcie Logowanie w metodzie umożliwienia usługodawcy e-mail / hasło. Pamiętaj, że logowanie za pomocą poczty e-mail/hasła musi być włączone, aby można było korzystać z logowania za pomocą łącza e-mail.

  2. W tej samej sekcji, należy włączyć odnośnik email (bez podawania haseł sign-in) w sposobie logowania i kliknij Zapisz.

  3. Będziesz mieć również umożliwienie Firebase dynamiczne linki do użytku email-link logowania. W konsoli Firebase , kliknij na dynamiczne linki pod Engage w pasku nawigacyjnym. Kliknij Rozpoczęcie i dodać domenę. Wybrana tutaj domena zostanie odzwierciedlona w linkach e-mail wysyłanych do użytkowników.

  4. Można włączyć odnośnik email wejść w FirebaseUI wywołując enableEmailLinkSignIn na EmailBuilder instancji. Potrzebny będzie również zapewnienie prawidłowego ActionCodeSettings obiekt z setHandleCodeInApp wartość true. Dodatkowo, trzeba whitelist URL można przejść do setUrl , co można zrobić w konsoli Firebase pod Authentication -> Zaloguj się Metod -> Autoryzowani domen.

    Jawa

    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);

    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)
  5. Jeśli chcesz złapać link w aktywności specyficznej, należy wykonać czynności opisane tutaj . W przeciwnym razie link przekieruje do Twojej aktywności w programie uruchamiającym.

  6. Gdy złapiesz precyzyjny link, musisz zadzwonić, aby sprawdzić, czy możemy go za Ciebie obsłużyć. Jeśli to możliwe, należy następnie przekazać je do nas poprzez setEmailLink .

    Jawa

    if (AuthUI.canHandleIntent(getIntent())) {
        if (getIntent().getExtras() == null) {
            return;
        }
        String link = getIntent().getExtras().getString(ExtraConstants.EMAIL_LINK_SIGN_IN);
        if (link != null) {
            Intent signInIntent = AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setEmailLink(link)
                    .setAvailableProviders(providers)
                    .build();
            signInLauncher.launch(signInIntent);
        }
    }

    Kotlin+KTX

    if (AuthUI.canHandleIntent(intent)) {
        val extras = intent.extras ?: return
        val link = extras.getString(ExtraConstants.EMAIL_LINK_SIGN_IN)
        if (link != null) {
            val signInIntent = AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setEmailLink(link)
                    .setAvailableProviders(providers)
                    .build()
            signInLauncher.launch(signInIntent)
        }
    }
  7. Opcjonalnie urządzenie Krzyż email Link Logowanie jest obsługiwane, co oznacza, że link wysłany za pośrednictwem aplikacji na Androida może być używany do logowania się na internecie lub Apple aplikacje. Domyślnie obsługa wielu urządzeń jest włączona. Można je wyłączyć poprzez wywołanie setForceSameDevice na EmailBuilder instancji.

    Zobacz FirebaseUI-Web i FirebaseUI-iOS , aby uzyskać więcej informacji.

Wyloguj się

FirebaseUI zapewnia wygodne metody wylogowywania się z Uwierzytelniania Firebase, a także od wszystkich dostawców tożsamości społecznościowych:

Jawa

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin+KTX

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener {
            // ...
        }

Możesz również całkowicie usunąć konto użytkownika:

Jawa

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin+KTX

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener {
            // ...
        }

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 wymagają dalszego dostosowywania można przekazać motywu i logo do logowania Intent konstruktora:

Jawa

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);

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)

Możesz także ustawić niestandardową politykę prywatności i warunki korzystania z usługi:

Jawa

Intent signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .setTosAndPrivacyPolicyUrls(
                "https://example.com/terms.html",
                "https://example.com/privacy.html")
        .build();
signInLauncher.launch(signInIntent);

Kotlin+KTX

val 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 FirebaseUI, zobacz README plik na GitHub.
  • Jeśli okaże się, problem w FirebaseUI i chciałbyś go zgłosić, użyj emisyjnej tracker GitHub .