Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

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

FirebaseUI ist eine auf dem Firebase Authentication SDK aufbauende Bibliothek, die Drop-in-UI-Flows zur Verwendung in Ihrer App bereitstellt. FirebaseUI bietet die folgenden Vorteile:

  • Mehrere Anbieter – Anmeldeabläufe für E-Mail/Passwort, E-Mail-Link, Telefonauthentifizierung, Google-Anmeldung, Facebook-Anmeldung, 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 – Flows zum sicheren Verknüpfen von Benutzerkonten über Identitätsanbieter hinweg.
  • Anonymes Benutzer-Upgrade – Flows zum sicheren Upgrade anonymer Benutzer.
  • Benutzerdefinierte Designs – Passen Sie das Aussehen von FirebaseUI an Ihre App an. Da FirebaseUI Open Source ist, können Sie das Projekt außerdem abzweigen und genau an Ihre Bedürfnisse anpassen.
  • Smart Lock for Passwords – automatische Integration mit Smart Lock for Passwords für eine schnelle geräteübergreifende Anmeldung.

Bevor Sie beginnen

  1. Falls noch nicht geschehen , fügen Sie Firebase zu Ihrem Android-Projekt hinzu .

  2. Fügen Sie die Abhängigkeiten für FirebaseUI zu Ihrer build.gradle Datei auf build.gradle . 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. Öffnen Sie in der Firebase Console den Abschnitt Authentifizierung und aktivieren Sie die Anmeldemethoden , 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 die Google-Anmeldung unterstützen und den SHA-1-Fingerabdruck Ihrer App noch nicht angegeben haben, können Sie dies auf der Seite "Einstellungen" der Firebase-Konsole tun. Weitere Informationen zum Abrufen des SHA-1-Fingerabdrucks Ihrer App finden Sie unter Authentifizierung Ihres Clients .

  5. Wenn Sie die Anmeldung mit Facebook oder Twitter unterstützen, fügen Sie String-Ressourcen zu strings.xml , die die von jedem Anbieter erforderlichen Identifizierungsinformationen 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 einen ActivityResultLauncher der einen Rückruf für den Ergebnisvertrag der FirebaseUI-Aktivität 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 der onSignInResult abgeschlossen ist, erhalten Sie das Ergebnis in 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. Öffnen Sie in der Firebase-Konsole den Abschnitt Authentifizierung . 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. Aktivieren Sie im selben Abschnitt die Anmeldemethode E-Mail-Link (kennwortlose Anmeldung) und klicken Sie auf Speichern .

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

  4. Sie können die E-Mail-Link-Anmeldung in FirebaseUI enableEmailLinkSignIn indem Sie enableEmailLinkSignIn auf einer EmailBuilder Instanz EmailBuilder . Außerdem müssen Sie ein gültiges ActionCodeSettings Objekt setHandleCodeInApp , bei dem setHandleCodeInApp auf true gesetzt ist. Darüber hinaus müssen Sie die URL, die Sie an setUrl , auf die Whitelist setUrl , was in der Firebase-Konsole unter Authentifizierung -> setUrl -> Autorisierte Domänen erfolgen kann.

    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 es uns dann über 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. Die optionale geräteübergreifende E-Mail-Link-Anmeldung wird unterstützt, was bedeutet, dass der über Ihre Android-App gesendete Link zur Anmeldung bei Ihren Web- oder iOS-Apps verwendet werden kann. Standardmäßig ist die geräteübergreifende Unterstützung aktiviert. Sie können es deaktivieren, indem Sie setForceSameDevice auf der EmailBuilder Instanz EmailBuilder .

    Weitere Informationen finden Sie unter FirebaseUI-Web und FirebaseUI-iOS .

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 Anpassungen benötigen, können Sie ein Design und ein Logo an den Intent Builder für die Anmeldung übergeben:

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 zur Verwendung und Anpassung von FirebaseUI finden Sie in der README- Datei auf GitHub.
  • Wenn Sie ein Problem in FirebaseUI finden und es melden möchten, verwenden Sie den GitHub-Problem-Tracker .