Put it all together - Login with device ID - (Unity module)
Connect the UI to Let the Player Log In with Device ID
In this tutorial, you will learn how to connect the login menu with the login implementation created in the previous section.
Open the
LoginMenu_Starter
class and define a variable to store the wrapper you created earlier:private AuthEssentialsWrapper_Starter authWrapper;
Initialize the wrapper in the
Start()
function, alongside your button bindings:private void Start()
{
...
authWrapper = TutorialModuleManager.Instance.GetModuleClass<AuthEssentialsWrapper_Starter>();
loginWithDeviceIdButton.onClick.AddListener(OnLoginWithDeviceIdButtonClicked);
quitGameButton.onClick.AddListener(OnQuitGameButtonClicked);
}Update the
OnLoginWithDeviceIdButtonClicked()
function to send the login request using your wrapper:private void OnLoginWithDeviceIdButtonClicked()
{
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Loading);
OnRetryLoginClicked = OnLoginWithDeviceIdButtonClicked;
authWrapper.LoginWithDeviceId(OnLoginCompleted);
}Create the callback function to handle the login result for the UI:
public void OnLoginCompleted(Result<TokenData, OAuthError> result)
{
if (!result.IsError)
{
MenuManager.Instance.ChangeToMenu(AssetEnum.MainMenuCanvas);
BytewarsLogger.Log($"Login successful: {result.Value.ToJsonString()}");
}
else
{
widgetSwitcher.ErrorMessage = $"Login failed: {result.Error.error}";
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
StartCoroutine(SetSelectedGameObject(retryLoginButton.gameObject));
}
}Now open the
AuthEssentialsWrapper_Starter
class and add a new callback function to handle lobby disconnection. If the disconnection is due to multiple sessions or an intentional logout, the game should log out the user:private void OnLobbyDisconnected(WsCloseCode code)
{
BytewarsLogger.Log($"Lobby service disconnected with code: {code}");
/* If disconnected from lobby intentionally or due to account issue,
* log out and return to the login menu. */
HashSet<WsCloseCode> disconnectCode = new HashSet<WsCloseCode>()
{
WsCloseCode.Normal,
WsCloseCode.DisconnectDueToMultipleSessions,
WsCloseCode.DisconnectDueToIAMLoggedOut
};
if (disconnectCode.Contains(code))
{
lobby.Disconnected -= OnLobbyDisconnected;
Logout(() => { MenuManager.Instance.ChangeToMenu(AssetEnum.LoginMenu); });
}
}Still in the same file, add the following code to the
Awake()
function to listen for lobby disconnection and quit actions:private void Awake()
{
...
lobby.Disconnected += OnLobbyDisconnected;
MainMenu.OnQuitPressed += Logout;
}
Resources
The files used in this tutorial section are available in the Unity Byte Wars GitHub repository.