Verknüpfen Sie mehrere Authentifizierungsanbieter mit einem Konto in Unity

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. Nutzer sind unabhängig vom Authentifizierungsanbieter, mit dem sie sich angemeldet haben, mit 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. 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.

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

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

  1. Melden Sie den Benutzer mit einem beliebigen Authentifizierungsanbieter oder -methode an.
  2. Füllen Sie die Anmelde-Flow für die neuen Authentifizierungsanbieter bis zu, aber nicht einschließlich, einen der Aufruf Firebase.Auth.FirebaseAuth.SignInWithCredentialAsync Methoden. Rufen Sie beispielsweise das Google-ID-Token des Benutzers, das Facebook-Zugriffstoken oder die E-Mail-Adresse und das Passwort ab.
  3. Holen Sie sich ein Firebase.Auth.Credential für die neuen Authentifizierungsanbieter:

    Google Sign-In
    Firebase.Auth.Credential credential =
        Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
    
    Facebook Anmelden
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
    
    E - Mail-Passwort-Anmeldung
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    
  4. Übergeben Sie das Firebase.Auth.Credential Objekt der angemeldeten Nutzer des LinkWithCredentialAsync Methode:

    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.FirebaseUser newUser = task.Result;
      Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

    Der Aufruf von LinkWithCredentialAsync wird scheitern , wenn die Anmeldeinformationen bereits auf ein anderes Benutzerkonto verknüpft sind. In dieser Situation müssen Sie die Konten und 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.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.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 der Benutzer melden Sie sich jetzt verlinkten Authentifizierungsanbieter und Zugriff auf die gleichen Daten in Firebase verwendet.

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

Um einen Auth - Anbieter von einem Benutzerkonto zu entkoppeln, den Anbieter - ID an den Pass UnlinkAsync Methode. Sie können den Provider - IDs des Auth - Anbieters an einen Benutzer durch den Aufruf verknüpft bekommen 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.FirebaseUser newUser = task.Result;
  Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})",
      newUser.DisplayName, newUser.UserId);
});