Mehrere Authentifizierungsanbieter mit einem Konto in Unity verknüpfen

Sie können Nutzern erlauben, sich mit Mehrfachauthentifizierung in Ihrer App anzumelden indem Sie die Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen. Die Nutzer werden unabhängig davon, ob sie Authentifizierungsanbieter, mit dem er sich angemeldet hat. Beispiel: Ein Nutzer, der sich mit einem Passwort ein Google-Konto verknüpfen und sich mit beiden Methoden im in der Zukunft. Oder ein anonymer Nutzer kann ein Facebook-Konto verknüpfen und später sich bei Facebook an, damit Sie Ihre App weiterhin nutzen können.

Hinweis

Unterstützung für zwei oder mehr Authentifizierungsanbieter hinzufügen (möglicherweise anonyme Authentifizierung) an Ihre Anwendung.

Die Klasse FirebaseAuth ist das Gateway für alle API-Aufrufe. Sie können über FirebaseAuth.DefaultInstance darauf zugreifen.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

So verknüpfen Sie die Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto:

  1. Melden Sie den Nutzer mit einem beliebigen Authentifizierungsanbieter oder einer beliebigen Authentifizierungsmethode an.
  2. Schließen Sie den Anmeldevorgang für den neuen Authentifizierungsanbieter bis, aber nicht ab Dazu gehört auch das Aufrufen einer der Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync-Methoden. Beispiel: get Das Google-ID-Token, das Facebook-Zugriffstoken oder die E-Mail-Adresse und das Passwort des Nutzers
  3. Rufen Sie eine 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-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 ist. In diesem Fall müssen Sie die Konten und die zugehörigen Daten entsprechend Ihrer App zusammenführen:

    // 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 einen beliebigen verknüpften Authentifizierungsanbieter nutzen und auf dieselben Firebase-Daten zugreifen.

Sie können die Verknüpfung eines Authentifizierungsanbieters mit einem Konto aufheben, sodass der Nutzer sich nicht länger bei diesem Anbieter anmelden.

Wenn Sie die Verknüpfung eines Authentifizierungsanbieters mit einem Nutzerkonto aufheben möchten, übergeben Sie die Anbieter-ID an den UnlinkAsync-Methode. Sie können die Anbieter-IDs der Authentifizierung abrufen. mit einem Nutzer über einen Aufruf von ProviderData

// 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);
});