Por defecto, la API de WaaS solo permite una cuenta por correo electrónico. Si un usuario intenta iniciar sesión usando un método diferente pero el mismo correo electrónico que antes, recibirá un error EmailAlreadyInUse.

Por ejemplo: si el usuario creó su cuenta usando Google Sign In y luego intenta iniciar sesión con Correo electrónico + OTP usando un método diferente, recibirá este error.

Por defecto (si utiliza el LoginPanel predeterminado), el SDK abrirá automáticamente el prefab FederatedAuthPopupPanel ubicado en SequenceFrontend > Prefabs > FederatedAuthPopupPanel. Este prefab puede personalizarse a su gusto o reemplazarse en el prefab LoginPanel. Este panel explicará al usuario que no se permiten métodos de inicio de sesión duplicados y le pedirá que regrese a la pantalla de inicio de sesión e ingrese con su método asociado (o con un correo electrónico diferente).

Si EnableMultipleAccountsPerEmail está habilitado en SequenceConfig, el FederatedAuthPopupPanel le dará al usuario la opción de crear otra cuenta asociada a su correo electrónico.

Una vez que el usuario haya iniciado sesión en su cuenta, el SDK realizará automáticamente una solicitud FederateAccount (ver SequenceLogin). Esto asociará también el método de inicio de sesión fallido con ese correo electrónico, de modo que el usuario podrá iniciar sesión con cualquiera de los dos en el futuro. Usando el ejemplo anterior, el usuario ahora podrá iniciar sesión en su cuenta usando Google Sign In o Correo electrónico + OTP.

Federar cuentas manualmente

Puede que desee agregar un botón en su aplicación para permitir al usuario asociar un método de inicio de sesión adicional a su correo electrónico (especialmente si utiliza el inicio de sesión como invitado). Debe obtener una referencia a SequenceLogin y luego llamar al método FederateAccount correspondiente para el método de inicio de sesión.

SequenceLogin login = SequenceLogin.GetInstance();

// PlayFab
login.FederateAccountPlayFab(titleId, sessionTicket, email, walletAddress);

// OIDC (Social)
login.FederateAccountSocial(idToken, loginMethod, walletAddress);

// Guest
login.FederateAccountGuest(walletAddress);

// Email
login.Login(email);
// Later ... Once you've received the OTP code from the user
login.FederateAccountEmail(email, code, walletAddress); 

donde walletAddress es la dirección del SequenceWallet que obtuvo tras autenticar al usuario.

Reutilizar el LoginPanel predeterminado

Para permitir que un usuario federé o vincule sus cuentas manualmente usando el LoginPanel predeterminado, simplemente llame a SetConnectedWalletAddress en su instancia de SequenceLogin o llame a SequenceLogin.GetInstanceToFederateAuth con la dirección de wallet autenticada actualmente.

SequenceLogin login = SequenceLogin.GetInstance();
login.SetConnectedWalletAddress(authenticatedSequenceWalletAddress);

// or

SequenceLogin.GetInstanceToFederateAuth(authenticatedSequenceWalletAddress);

Esto configurará su instancia de SequenceLogin para federar las cuentas en lugar de crear una nueva sesión.

Una vez que el usuario haya cerrado sesión, no olvide llamar a SetConnectedWalletAddress(null) para reconfigurar SequenceLogin y volver a crear sesiones nuevas.

p. ej.

private void OnDropSessionCompleteHandler(string sessionId) {
    if (sessionId == Wallet.SessionId)
    {
        SequenceLogin.GetInstance().SetConnectedWalletAddress(null);
        SceneManager.LoadScene("LoginScene"); // Re-open your scene or UI to allow the user to log back in and create a new session here
    }
}

Eliminar cuentas federadas

Si en algún momento desea eliminar la asociación de una cuenta federada, puede hacerlo con el método IWallet.RemoveFederatedAccount.

_wallet.OnFederatedAccountRemovedComplete += (accountIdString, success) => {
    if (success) 
    {
        Debug.Log($"Successfully removed {accountIdString} as a login method");
        // Do something
    }else 
    {
        // Handle failure
    }
};

bool success = await _wallet.RemoveFederatedAccount(account);