Mehrere Authentifizierungsanbieter mit einem Konto in Unity verknüpfen

Sie können Nutzern die Anmeldung in Ihrer App über mehrere Authentifizierungsanbieter ermöglichen, indem Sie Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen. Nutzer sind unabhängig vom Authentifizierungsanbieter, den sie für die Anmeldung verwendet haben, anhand derselben 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).

Die FirebaseAuth-Klasse ist das Gateway für alle API-Aufrufe. Sie ist über FirebaseAuth.DefaultInstance zugänglich.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

So verknüpfen Sie Anmeldedaten eines Authentifizierungsanbieters mit einem bestehenden Nutzerkonto:

  1. Melden Sie sich mit einem beliebigen Authentifizierungsanbieter oder einer Methode an.
  2. Schließen Sie den Anmeldevorgang für den neuen Authentifizierungsanbieter ab, bis Sie eine der Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync-Methoden aufrufen. Rufen Sie beispielsweise das Google-ID-Token, das Facebook-Zugriffstoken oder die E‑Mail-Adresse und das Passwort des Nutzers ab.
  3. Rufen Sie ein Firebase.Auth.Credential für den neuen Authentifizierungsanbieter ab:

    Google Log-in
    Firebase.Auth.Credential credential =
        Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
    Facebook-Anmeldung
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
    Anmeldung mit E-Mail-Adresse und Passwort
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
  4. Übergeben Sie das Firebase.Auth.Credential-Objekt an die Methode LinkWithCredentialAsync des angemeldeten Nutzers:

    auth.CurrentUser.LinkWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("LinkWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("LinkWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });

    Der Aufruf von LinkWithCredentialAsync schlä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:

    // Gather data for the currently signed in User.
    string currentUserId = auth.CurrentUser.UserId;
    string currentEmail = auth.CurrentUser.Email;
    string currentDisplayName = auth.CurrentUser.DisplayName;
    System.Uri currentPhotoUrl = auth.CurrentUser.PhotoUrl;
    
    // Sign in with the new credentials.
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    
      // TODO: Merge app specific details using the newUser and values from the
      // previous user, saved above.
    });

Wenn der Aufruf von LinkWithCredentialAsync erfolgreich ist, kann sich der Nutzer 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 Nutzer nicht mehr mit diesem Anbieter anmelden kann.

Wenn Sie die Verknüpfung eines Authentifizierungsanbieters mit einem Nutzerkonto aufheben möchten, übergeben Sie die Anbieter-ID an die Methode UnlinkAsync. Sie können die Anbieter-IDs der Auth-Anbieter, die mit einem Nutzer verknüpft sind, abrufen, indem Sie ProviderData aufrufen.

// Unlink the sign-in provider from the currently active user.
// providerIdString is a string identifying a provider,
// retrieved via FirebaseAuth.FetchProvidersForEmail().
auth.CurrentUser.UnlinkAsync(providerIdString).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("UnlinkAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("UnlinkAsync encountered an error: " + task.Exception);
    return;
  }

  // The user has been unlinked from the provider.
  Firebase.Auth.AuthResult result = task.Result;
  Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})",
      result.User.DisplayName, result.User.UserId);
});

Fehlerbehebung

Wenn beim Verknüpfen mehrerer Konten Fehler auftreten, finden Sie hier weitere Informationen.