Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Verknüpfen Sie mehrere Authentifizierungsanbieter mit einem Konto auf Android

Sie können Benutzern erlauben, sich mit mehreren Authentifizierungsanbietern bei Ihrer App anzumelden, indem Sie die Anmeldeinformationen des Authentifizierungsanbieters mit einem vorhandenen Benutzerkonto verknüpfen. Benutzer können unabhängig vom Authentifizierungsanbieter, mit dem sie sich angemeldet haben, anhand derselben Firebase-Benutzer-ID identifiziert werden. Beispielsweise kann ein Benutzer, der sich mit einem Kennwort angemeldet hat, ein Google-Konto verknüpfen und sich künftig mit beiden Methoden anmelden. Oder ein anonymer Benutzer kann ein Facebook-Konto verknüpfen und sich später bei Facebook anmelden, um Ihre App weiterhin zu verwenden.

Bevor Sie beginnen

Fügen Sie Ihrer App Unterstützung für zwei oder mehr Authentifizierungsanbieter (möglicherweise einschließlich anonymer Authentifizierung) hinzu.

So verknüpfen Sie die Anmeldeinformationen des Authentifizierungsanbieters mit einem vorhandenen Benutzerkonto:

  1. Melden Sie sich mit einem beliebigen Authentifizierungsanbieter oder einer beliebigen Authentifizierungsmethode beim Benutzer an.
  2. Schließen Sie den Anmeldefluss für den neuen Authentifizierungsanbieter ab, bis Sie eine der FirebaseAuth.signInWith Methoden aufrufen, jedoch nicht einschließen. Holen Sie sich beispielsweise das Google ID-Token des Benutzers, das Facebook-Zugriffstoken oder die E-Mail-Adresse und das Kennwort.
  3. Holen Sie sich ein AuthCredential für den neuen Authentifizierungsanbieter:

    Google-Anmeldung

    Java

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);

    Kotlin + KTX

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
    Facebook Login

    Java

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());

    Kotlin + KTX

    val credential = FacebookAuthProvider.getCredential(token.token)
    Anmeldung per E-Mail-Passwort

    Java

    AuthCredential credential = EmailAuthProvider.getCredential(email, password);

    Kotlin + KTX

    val credential = EmailAuthProvider.getCredential(email, password)
  4. AuthCredential das AuthCredential Objekt an die linkWithCredential Methode des angemeldeten Benutzers:

    Java

    mAuth.getCurrentUser().linkWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "linkWithCredential:success");
                        FirebaseUser user = task.getResult().getUser();
                        updateUI(user);
                    } else {
                        Log.w(TAG, "linkWithCredential:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
    
                    // ...
                }
            });

    Kotlin + KTX

    auth.currentUser!!.linkWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    Log.d(TAG, "linkWithCredential:success")
                    val user = task.result?.user
                    updateUI(user)
                } else {
                    Log.w(TAG, "linkWithCredential:failure", task.exception)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }
    
                // ...
            }

    Der Aufruf von linkWithCredential fehl, wenn die Anmeldeinformationen bereits mit einem anderen Benutzerkonto verknüpft sind. In dieser Situation müssen Sie das Zusammenführen der Konten und der zugehörigen Daten entsprechend Ihrer App behandeln:

    Java

    FirebaseUser prevUser = FirebaseAuth.getInstance().getCurrentUser();
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    FirebaseUser currentUser = task.getResult().getUser();
                    // Merge prevUser and currentUser accounts and data
                    // ...
                }
            });

    Kotlin + KTX

    val prevUser = auth.currentUser
    auth.signInWithCredential(credential)
            .addOnSuccessListener { result ->
                val currentUser = result.user
                // Merge prevUser and currentUser accounts and data
                // ...
            }
            .addOnFailureListener {
                // ...
            }

Wenn der Aufruf von linkWithCredential erfolgreich ist, kann sich der Benutzer jetzt mit einem beliebigen verknüpften Authentifizierungsanbieter anmelden und auf dieselben Firebase-Daten zugreifen.

Sie können die Verknüpfung eines Authentifizierungsanbieters mit einem Konto aufheben, sodass sich der Benutzer nicht mehr bei diesem Anbieter anmelden kann.

Um die Verknüpfung eines Authentifizierungsanbieters mit einem Benutzerkonto aufzuheben, übergeben Sie die Anbieter-ID an die Methode zum unlink der unlink . Sie können die Anbieter-IDs der mit einem Benutzer verknüpften getProviderData indem Sie getProviderData aufrufen.

Java

mAuth.getCurrentUser().unlink(providerId)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // Auth provider unlinked from account
                    // ...
                }
            }
        });

Kotlin + KTX

Firebase.auth.currentUser!!.unlink(providerId)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // Auth provider unlinked from account
                // ...
            }
        }