1 분 소요

Intro

이번 포스팅에서는 로그인 UI를 구성하고, Firebase에 등록된 계정으로 로그인이 되는지 확인해보았다.

로그인씬은 아래와같이 구성했다.

image

이메일과 비밀번호를 입력받을 InputField 2개와

로그인을 시도할 Button이 하나 배치되어있다.

그리고, 로그인을 구현할 Auth Manager 오브젝트가 하나 배치되어있다.

image

로그인 구현

로그인의 구현은 AuthManager 클래스가 담당한다.

public class AuthManager : MonoBehaviour
{
    [SerializeField] private TMP_InputField email;
    [SerializeField] private TMP_InputField passWord;
    [SerializeField] private Button signInButton;

    public bool IsFirebaseReaddy { get; private set; }          // 현재 환경이 Firebase 가동가능 여부
    public bool IsSignInOnProgress { get; private set; }        // 중복 로그인 방지

    public static FirebaseApp firebaseApp;
    public static FirebaseAuth firebaseAuth;
    public static FirebaseUser user;

    private void Start()
    {
        signInButton.interactable = false;          // 버튼 상호작용 비활성화

        // FireBase 연동 가능한지 확인 후 SignIn 버튼 활성화
        FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task =>
        {
            var result = task.Result;               // 결과상태

            if (result != DependencyStatus.Available)
            {
                Debug.LogError(result.ToString());
                IsFirebaseReaddy = false;
            }
            else
            {
                IsFirebaseReaddy = true;

                firebaseApp = FirebaseApp.DefaultInstance;
                firebaseAuth = FirebaseAuth.DefaultInstance;
            }

            signInButton.interactable = IsFirebaseReaddy;
        });
    }

    public void SignIn()
    {
        if (!IsFirebaseReaddy || IsSignInOnProgress || user != null)
        {
            return;
        }

        IsSignInOnProgress = true;
        signInButton.interactable = false;          // 로그인과정중 로그인버튼 비활성화

        firebaseAuth.SignInWithEmailAndPasswordAsync(email.text, passWord.text).ContinueWithOnMainThread(task =>
        {
            Debug.Log($"Sign In Status : { task.Status }");
            IsSignInOnProgress = false;
            signInButton.interactable = true;

            if(task.IsFaulted)
            {
                Debug.Log("실패");
                Debug.LogError(task.Exception);
            }
            else if(task.IsCanceled)
            {
                Debug.LogError("Sign in canceled");
            }
            else
            {
                user = task.Result.User;
                Debug.Log(user.Email);
                SceneManager.LoadScene("Lobby");
            }
        });
    }
}
  • 로그인씬이 활성화되면 Firebase와 연동이 가능한 환경인지 파악하기전까지 로그인버튼은 잠깐 비활성화해둔다.

  • FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread 를 통해 task에 결과를 저장하고, 결과에 따른 동작을 실행한다.
    • 실패할경우, 실패원인을 출력하도록했다.
    • 성공할경우, 준비완료상태로 바꾸고 버튼을 활성화시켰다.
  • 로그인 버튼을 누르면 SighIn 메서드가 호출된다.
    • 중복 로그인을 방지하기위해 로그인 시도중임을 알리고, 로그인버튼도 비활성화해둔다.
    • InputField 에 입력된 이메일과 패스워드를 SignInWithEmailAndPasswordAsync 를 통해
    • Firebase에 등록된 계정과 일치하는지 확인하고 로그인결과를 출력한다.
  • 로그인을 성공하면 Lobby 씬으로 이동한다.

image

  • USE_AUTH_EMULATOR not set : Firebase Auth Emulator를 사용하도록 설정하지 않음.
    • 에러는 아니며 에뮬레이터 환경을 쓰고있지 않다는 로그
  • Sign In Status : RanToCompletion : 로그인이 정상적으로 완료됨
    • 성공 또는 실패 여부는 별도 확인 필요

태그: ,

카테고리:

업데이트:

댓글남기기