Catch up on everthing we announced at this year's Firebase Summit. Learn more

Fügen Sie mit FirebaseUI ganz einfach die Anmeldung zu Ihrer Android-App hinzu

FirebaseUI ist eine Bibliothek auf der SDK Firebase Authentifizierung aufgebaut , die Drop-in - UI bietet die Verwendung in Ihrer Anwendung fließt für. FirebaseUI bietet die folgenden Vorteile:

  • Mehrere Provider - Anmelde-Flows für E - Mail / Passwort, E - Mail - Link, Telefon - Authentifizierung, Google Sign-In, Facebook Anmelden, Twitter Anmeldung und GitHub Anmeldung.
  • Account Management - fließt zu Account - Management - Aufgaben wie Kontoerstellung und das Zurücksetzen von Kennwörtern umgehen.
  • Kontoverknüpfung - fließt , um sicher Link Benutzerkonten über Identity - Provider.
  • Anonymous Upgrade Benutzer - fließt sicher für anonyme Benutzer zu aktualisieren.
  • Benutzerdefinierte Themen - passen Sie das Aussehen von FirebaseUI Ihre App anzupassen. Da FirebaseUI Open Source ist, können Sie das Projekt außerdem abzweigen und genau an Ihre Bedürfnisse anpassen.
  • Smart Lock für Passwörter - automatische Integration mit Smart Lock für Passwörter für schnelle Cross-Device-Anmeldung.

Bevor Sie beginnen

  1. Wenn Sie nicht bereits haben, fügen Sie Firebase zu dem Android - Projekt .

  2. Fügen Sie die Abhängigkeiten für FirebaseUI zu Ihrer App-Ebene build.gradle Datei. Wenn Sie die Anmeldung mit Facebook oder Twitter unterstützen möchten, fügen Sie auch die Facebook- und Twitter-SDKs hinzu:

    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'
    }
    

    Das FirebaseUI Auth SDK weist transitive Abhängigkeiten vom Firebase SDK und dem Google Play Services SDK auf.

  3. In der Firebase Konsole , öffnen Sie den Abschnitt Authentifizierung und aktivieren Sie die Anmelde-Methoden , die Sie unterstützen möchten. Einige Anmeldemethoden erfordern zusätzliche Informationen, die normalerweise in der Entwicklerkonsole des Dienstes verfügbar sind.

  4. Wenn Sie Google-Anmeldung unterstützen und noch nicht Ihre App SHA-1 Fingerabdruck angegeben, tun Sie dies aus der Seite Einstellungen der Konsole Firebase. Siehe Authentifizieren Your Client für Details, wie der App SHA-1 Fingerabdruck zu erhalten.

  5. Wenn Sie unterstützen Anmeldung mit Facebook oder Twitter, String - Ressourcen hinzuzufügen strings.xml , dass die Identifizierungsinformationen von jedem Provider erforderlich angeben:

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

Einloggen

Erstellen Sie eine ActivityResultLauncher , die einen Rückruf für die FirebaseUI Aktivität Ergebnis Vertrag registriert:

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

Kotlin+KTX

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

Um den FirebaseUI-Anmeldevorgang zu starten, erstellen Sie eine Anmeldeabsicht mit Ihren bevorzugten Anmeldemethoden:

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

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)

Wenn die Anmelde-Flow abgeschlossen ist, wird das Ergebnis in erhalten onSignInResult :

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

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

Anmeldemethoden einrichten

  1. In der Firebase Konsole öffnen den Abschnitt Authentication. Auf dem Anmelden Methode Registerkarte, aktivieren Sie den E - Mail / Passwort - Anbieter. Beachten Sie, dass die E-Mail-/Passwort-Anmeldung aktiviert sein muss, um die E-Mail-Link-Anmeldung zu verwenden.

  2. Im selben Abschnitt aktivieren E - Mail - Link ( ohne Passwort-Anmeldung) Anmelde-Methode und klicken Sie auf Speichern.

  3. Sie müssen auch Firebase dynamische Links zu verwenden E - Mail-Link einloggen. Im aktivieren Firebase - Konsole , klicken Sie auf dynamische Links unter in der Navigationsleiste Engage. Klicken Sie auf Erste Schritte und fügen Sie eine Domain. Die hier ausgewählte Domain wird in den E-Mail-Links angezeigt, die an Ihre Benutzer gesendet werden.

  4. Sie können E - Mail - Link einloggen in FirebaseUI durch den Aufruf ermöglichen enableEmailLinkSignIn auf einer EmailBuilder Instanz. Dort finden Sie auch ein gültiges zur Verfügung stellen müssen ActionCodeSettings Objekt mit setHandleCodeInApp Satz auf true. Darüber hinaus müssen Sie auf die weiße Liste der URL , die Sie weitergeben setUrl , die in der getan werden kann Firebase Konsole , unter Authentifizierung -> Anmelden Methoden -> Autorisierte Domänen.

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

    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. Wenn Sie den Link in einer bestimmten Aktivität fangen wollen, folgen Sie bitte den Schritten skizziert hier . Andernfalls leitet der Link zu Ihrer Launcher-Aktivität weiter.

  6. Sobald Sie den Deep-Link gefunden haben, müssen Sie sich telefonisch verifizieren, dass wir ihn für Sie bearbeiten können. Wenn wir können, müssen Sie dann über uns passieren setEmailLink .

    Java

    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. Optional Kreuz Gerät E - Mail - Link - Symbol in unterstützt wird, was bedeutet , dass die Verbindung über Ihren Android - App gesendet werden , kann in auf Ihrem Web - oder Apple - Apps anmelden verwendet werden. Standardmäßig ist die geräteübergreifende Unterstützung aktiviert. Sie können es deaktivieren , indem Aufruf setForceSameDevice auf der EmailBuilder Instanz.

    Siehe FirebaseUI-Web und FirebaseUI-iOS für weitere Informationen.

Austragen

FirebaseUI bietet bequeme Methoden zum Abmelden von Firebase Authentication sowie allen sozialen Identitätsanbietern:

Java

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

Kotlin+KTX

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

Sie können das Benutzerkonto auch vollständig löschen:

Java

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

Kotlin+KTX

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

Anpassung

FirebaseUI verwendet standardmäßig AppCompat für die Gestaltung, was bedeutet, dass es das Farbschema Ihrer App automatisch übernimmt. Wenn Sie weitere Anpassung benötigen , können Sie ein Thema und ein Logo auf die Anmelde-Pass Intent Bauer:

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

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)

Sie können auch eine benutzerdefinierte Datenschutzrichtlinie und Nutzungsbedingungen festlegen:

Java

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)

Nächste Schritte

  • Weitere Informationen über die Verwendung und FirebaseUI Customizing finden Sie in der Readme - Datei auf GitHub.
  • Wenn Sie ein Problem in FirebaseUI finden und möchte es berichten, verwenden Sie die GitHub issue tracker .