Sie können Nutzern die Anmeldung in Ihrer App über mehrere Authentifizierungsanbieter ermöglichen, indem Sie die Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen. Nutzer sind unabhängig vom Authentifizierungsanbieter, den sie für die Anmeldung verwendet haben, durch dieselbe Firebase-Nutzer-ID identifizierbar. Ein Nutzer, der sich beispielsweise mit einem Passwort angemeldet hat, kann ein Google-Konto verknüpfen und sich künftig mit einer der beiden Methoden anmelden. Alternativ kann ein anonymer Nutzer ein Facebook-Konto verknüpfen und sich später mit Facebook anmelden, um Ihre App weiter zu verwenden.
Hinweis
Fügen Sie Ihrer App Unterstützung für zwei oder mehr Authentifizierungsanbieter hinzu (möglicherweise einschließlich anonymer Authentifizierung).
Anmeldedaten des Authentifizierungsanbieters mit einem Nutzerkonto verknüpfen
So verknüpfen Sie Anmeldedaten des Authentifizierungsanbieters mit einem bestehenden Nutzerkonto:
- Melden Sie sich mit einem beliebigen Authentifizierungsanbieter oder einer Methode an.
- Schließen Sie den Anmeldevorgang für den neuen Authentifizierungsanbieter ab, bis Sie eine der
FirebaseAuth.signInWith-Methoden aufrufen. Rufen Sie beispielsweise das Google-ID-Token, das Facebook-Zugriffstoken oder die E‑Mail-Adresse und das Passwort des Nutzers ab. Rufen Sie ein
AuthCredentialfür den neuen Authentifizierungsanbieter ab:Google Log-in
Kotlin
val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
Java
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
Facebook-Login
Kotlin
val credential = FacebookAuthProvider.getCredential(token.token)
Java
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
Anmeldung mit E-Mail-Adresse und Passwort
Kotlin
val credential = EmailAuthProvider.getCredential(email, password)
Java
AuthCredential credential = EmailAuthProvider.getCredential(email, password);
Übergeben Sie das
AuthCredential-Objekt an die MethodelinkWithCredentialdes angemeldeten Nutzers:Kotlin
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) } }
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); } } });
Der Aufruf von
linkWithCredentialschlägt fehl, wenn die Anmeldedaten bereits mit einem anderen Nutzerkonto verknüpft sind. In diesem Fall müssen Sie das Zusammenführen der Konten und der zugehörigen Daten entsprechend Ihrer App vornehmen:Kotlin
val prevUser = auth.currentUser auth.signInWithCredential(credential) .addOnSuccessListener { result -> val currentUser = result.user // Merge prevUser and currentUser accounts and data // ... } .addOnFailureListener { // ... }
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 // ... } });
Wenn der Aufruf von linkWithCredential erfolgreich ist, kann sich der Nutzer jetzt mit einem beliebigen verknüpften Authentifizierungsanbieter anmelden und auf dieselben Firebase-Daten zugreifen.
Verknüpfung eines Authentifizierungsanbieters mit einem Nutzerkonto aufheben
Ein einzelnes Firebase-Nutzerkonto kann mit mehreren Authentifizierungsanbietern verknüpft sein, z. B. E-Mail-Adresse/Passwort, Google, Facebook. So kann sich der Nutzer mit verschiedenen Methoden im selben Firebase-Konto anmelden.
Wenn Sie die Verknüpfung eines Authentifizierungsanbieters mit dem Konto eines Nutzers aufheben, kann sich der Nutzer nicht mehr mit diesem Anbieter anmelden.
Wenn Sie die Verknüpfung eines Authentifizierungsanbieters mit einem Nutzerkonto aufheben möchten, übergeben Sie die Anbieter-ID an die Methode unlink. Sie können die Anbieter-IDs der mit einem Nutzer verknüpften Authentifizierungsanbieter abrufen, indem Sie
getProviderData aufrufen.
Kotlin
Firebase.auth.currentUser!!.unlink(providerId) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Auth provider unlinked from account // ... } }
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 // ... } } });
Fehlerbehebung
Wenn beim Verknüpfen mehrerer Konten Fehler auftreten, lesen Sie die Dokumentation zu bestätigten E‑Mail-Adressen.