매번 그러는 것은 아니고 안드로이드에 올려서 테스트 할 시 원인이 무엇인지는 모르겠으나 순서가 꼬입니다.
상황을 말씀드리곘습니다. 먼저 코드입니다.
public void TouchStart()
{
loadingIcon.SetActive(true);
BackEndServerManager.Instance.BackendTokenLogin((bool result, string error) =>
{
Dispatcher.Instance.BeginInvoke(() =>
{
if (result)
{
mmLoadScene.LoadScene();
return;
}
loadingIcon.SetActive(false);
if (!error.Equals(string.Empty))
{
errorText.text = "유저 정보 불러오기 실패\n\n" + error;
errorObject.SetActive(true);
return;
}
_popupManager.DisplayPopup("LoginPopup");
});
});
}
- 유효한 액세스토큰이 있는 상황에서 위 함수를 실행합니다.
- _popupManager.DisplayPopup(“LoginPopup”); 코드가 LoginPopup을 띄우는 유일한 코드입니다.
- 간헐적으로, 토큰로그인 실패시 동작인 LoginPopup 이 뜨고난 후에 로그인이 성공되어 다음 씬으로 넘어가기가 실행됩니다.
비동기로 콜백에서 result가 false일때만 동작할 수 있는 LoginPopup 실행 코드가 어쨰서 로그인 성공과 동시에 일어날 수 있는지 이해가 가지 않습니다.
조언 부탁드립니다 ㅠ_ㅠ…
[참고]
뒤끝에서 제공하는 BackEndMatch의 BackEndServerManager 코드를 사용중입니다.
위에서 사용하는 BackendTokenLogin 함수는 아래와 같습니다.
public void BackendTokenLogin(Action<bool, string> func)
{
BackendAsyncClass.BackendAsync(Backend.BMember.LoginWithTheBackendTokenAsync, callback =>
{
if (callback.IsSuccess())
{
Debug.Log("토큰 로그인 성공");
tokenInfo = callback;
isSuccess = true;
isUpdateNickName = false;
loginSuccessFunc = func;
return;
}
Debug.Log("토큰 로그인 실패\n" + callback.ToString());
func(false, string.Empty);
});
}