Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Verknüpfen Sie mehrere Authentifizierungsanbieter mit einem Konto auf Android

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

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 sind durch dieselbe Firebase-Benutzer-ID identifizierbar, unabhängig davon, welchen Authentifizierungsanbieter sie für die Anmeldung verwendet haben. Beispielsweise kann ein Benutzer, der sich mit einem Passwort angemeldet hat, ein Google-Konto verknüpfen und sich in Zukunft mit einer der beiden Methoden anmelden. Oder ein anonymer Benutzer kann ein Facebook-Konto verknüpfen und sich später bei Facebook anmelden, um Ihre App weiter 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 den Benutzer mit einem beliebigen Authentifizierungsanbieter oder einer beliebigen Methode an.
  2. Vervollständigen Sie den Anmeldeablauf für den neuen Authentifizierungsanbieter bis zum Aufrufen einer der FirebaseAuth.signInWith -Methoden (aber nicht einschließlich). Rufen Sie beispielsweise das Google-ID-Token, das Facebook-Zugriffstoken oder die E-Mail-Adresse und das Passwort des Benutzers ab.
  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)
    E-Mail-Passwort-Anmeldung

    Java

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

    Kotlin+KTX

    val credential = EmailAuthProvider.getCredential(email, password)
  4. Übergeben Sie 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 zugehörigen Daten entsprechend Ihrer App handhaben:

    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 Verknüpfung. Sie können die Anbieter-IDs der mit einem Benutzer verknüpften Authentifizierungsanbieter abrufen, indem 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
                // ...
            }
        }