프로그램 강좌/유니티 + 파이어베이스

파이어베이스 유니티 로그인(이메일/비밀번호)

개양반 2017. 11. 16.

파이어베이스(Firebase) 로 할 수 있는 로그인

 


 

구글, 페이스북, 전화, 이메일/비밀번호, 트위터, GitHub 등 다양한 로그인을 지원해주는데요.

이메일과 비밀번호로 로그인하는 방법에 대해 알아보겠습니다.

 

로그인 SDK 설치하기


FirebaseAuth.unitypackage 파일을 유니티로 임포트합니다.

SDK 를 유니티에 임포트하는 방법에 대해서는 지난 포스트를 확인해주세요.

유니티에 SDK 임포트하는 방법 보러가기

 

 

콘솔창에서 이메일/비밀번호 활성화하기


파이어베이스 콘솔창으로 이동합니다.

Develop > Authentication > 로그인방법 에서 이메일/비빌번호를 활성화합니다.

 

 

해당 내용이 변경되면 google-services.json 파일이 변경됩니다. 

Project Overview 옆에 톱니바퀴를 눌러 프로젝스 설정 버튼을 누르면 google-services.json 파일을

다시 받을 수 있는 페이지로 이동합니다.

번거롭지만  google-services.json 을 다시 다운받아서 유니티에 임포트해줍니다. 

(기존의 google-services.json을 삭제하고 새로 넣어주세요.)

 

 

신규 사용자 가입


UGUI로 이메일과 비밀번호를 입력할 수 있는 InputField 와 Join버튼을 만듭니다.

 

 

 

C# 스크립트 - Login 을 만들고 아래 코드를 입력합니다.

using UnityEngine;
using UnityEngine.UI;
using Firebase.Auth;

public class Login : MonoBehaviour {

    [SerializeField] string email;
    [SerializeField] string password;

    public InputField inputTextEmail;
    public InputField inputTextPassword;
    public Text loginResult;



    FirebaseAuth auth;
    void Awake()
    {
        // 초기화
        auth = FirebaseAuth.DefaultInstance;
    }


    // 버튼이 눌리면 실행할 함수.
    public void JoinBtnOnClick()
    {
        email = inputTextEmail.text;
        password = inputTextPassword.text;

        Debug.Log("email: " + email + ", password: " + password);

        CreateUser();
    }
    

    void CreateUser()
    {
        auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
            if (task.IsCanceled)
            {
                Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
                loginResult.text = "회원가입 실패";
                return;
            }
            if (task.IsFaulted)
            {
                Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
                loginResult.text = "회원가입 실패";
                return;
            }

            // Firebase user has been created.
            Firebase.Auth.FirebaseUser newUser = task.Result;
            Debug.LogFormat("Firebase user created successfully: {0} ({1})",
                newUser.DisplayName, newUser.UserId);

            loginResult.text = "회원가입 굿럭";
        });
    }
}
 

 

Loing 이라는 게임 오브젝트를 만들고 컴포넌트로 위 스크립트를 추가합니다.

그 뒤에 UI 들을 연결해줍니다.

 

Button에 LoginBtnOnClick() 을 연결해 줍니다.

 

유니티를 실행하고 이메일과 비밀번호를 입력하고 JoinBtn 을 눌러봅니다.

유니티 콘솔창에 Firebase user created successfully:  () 라는 로그가 찍히면 성공한겁니다.

다만, 유니티에서 회원가입이 성공해도 실제로는 회원가입이 되지 않습니다. 

( 테스트로 진행되는 겁니다. )

 

실제로 회원 가입이 되는지 확인하려면 빌드해서 모바일로 진행하셔야 합니다.

모바일에서 회원가입이 완료되면 파이어베이스 콘솔창의 Authentication에 유저가 생성됩니다.

 

 

기존 사용자 로그인


회원가입을 만들었으니, 이제는 기존 사용자 로그인을 만들어볼게요.

Login.cs 파일에 아래 함수를 추가합니다.

  public void LoginBtnOnClick()
    {
        email = inputTextEmail.text;
        password = inputTextPassword.text;

        Debug.Log("email: " + email + ", password: " + password);

        LoginUser();
    }

    void LoginUser()
    {
        auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
            if (task.IsCanceled)
            {
                Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
                loginResult.text = "로그인 실패";                
                return;
            }
            if (task.IsFaulted)
            {
                Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception);
                loginResult.text = "로그인 실패";               
                return;
            }

            Firebase.Auth.FirebaseUser newUser = task.Result;
            Debug.LogFormat("User signed in successfully: {0} ({1})",
            newUser.DisplayName, newUser.UserId);

        });
 

 

유니티에 LoginBtn 버튼을 UGUI 로 만들어주시구요.

위의 LoginBtnOnClick함수를 연결해줍니다.

 

로그인 또는 로그아웃에 따라 유저의 로그인 상태 정보를 가져오는 것에 대해 알아보겠습니다.

Login.cs 의 아래 코드를 추가합니다.

FirebaseUser user;
    
    void Awake()
    {
        auth = FirebaseAuth.DefaultInstance;
        auth.StateChanged += AuthStateChanged;
        AuthStateChanged(this, null);
    }



    void AuthStateChanged(object sender, System.EventArgs eventArgs)
    {
        if (auth.CurrentUser != user)
        {
            bool signedIn = user != auth.CurrentUser && auth.CurrentUser != null;
            if (!signedIn && user != null)
            {
                Debug.Log("Signed out " + user.UserId);
            }
            user = auth.CurrentUser;
            if (signedIn)
            {
                Debug.Log("Signed in " + user.UserId);
                loginResult.text = user.UserId + " 로그인 굿럭";

            }
        }
    }
 

 

모바일로 빌드 한 뒤에 로그인을 테스트하면 잘 동작합니다.

PS) user 변수를 통해 유저의 정보를 쓰거나, 읽을 수도 있습니다.

 

** 다음 시간에는 구글로그인과 로그인 유저 정보 가져오기에 대해 알아보겠습니다 **

댓글

💲 추천 글