구글 Firebase 익명 로그인

간단한 앱을 만들면서 로그인이 필요한 경우가 생겼습니다. http 나 자체 서버 + DB 를 이용하여 서버를 구축하는데 많은 시간이 필요하게 되지만 구글 Firebase 를 통해 보다 쉽게 로그인 처리를 할 수 있습니다.
여기서는 구글 Firebase 를 이용해 익명 로그인 처리를 해보겠습니다.

작업 전에 먼저 준비할 사항이 있습니다.

  1. android ndk (Unity - Edit - Preferences - External Tools -NDK Download 이용)
  2. 유니티에서 안드로이드로 빌드한 빈 apk 파일 (패키지명을 만들어 빌드 - firebase 설정에서 필요)
  3. Firebase Unity SDK Import [여기]

Firebase 에 로그인 합니다.
프로젝트를 추가합니다.

생성된 프로젝트의 설정으로 이동하여 Android Firebase 를 추가합니다.

앱 등록 필요한 정보 입력 후 앱 등록을 클릭합니다.
Android 패키지 이름은 유니티에서 빌드할때 사용한 패키지명입니다.

구성 파일 다운로드 google-services.json 파일을 다운 받아 유니티 프로젝트 Assets 폴더에 복사후 다음을 클릭합니다.

Firebase SDK 추가 이미 Firebase SDK를 Import 했기 때문에 다음을 클릭합니다.

앱을 실행하여 설치 확인 이 단계 건너뛰기 클릭. -> 계정이 생성되면 후에 처리됩니다.

프로젝트 페이지에서 개발 - Authentication - 익명 클릭 - 사용 설정 on - 저장 순서로 진행합니다.

이제 Unity 코드 작업이 필요합니다.

Firebase 가이드의 시작익명 인증 을 참고 하셔서 진행하셔도 됩니다.

패널 오브젝트를 생성하여 버튼(로그인)을 자식 오브젝트로 만듭니다.

패널 오브젝트에 스크립트를 생성하고 아래 코드를 삽입합니다.

public class FirebasePanel : MonoBehaviour
{
    public Button _anonymousLoginButton;    //로그인 버튼.

    Firebase.Auth.FirebaseAuth _auth;
    Firebase.Auth.FirebaseUser _user;

    // Use this for initialization
    void Start()
    {
        InitializeFirebase();

        _anonymousLoginButton.onClick.AddListener(delegate { OnClick_AnonymousLogin(); });
    }

    // Update is called once per frame
    void Update()
    {

    }

    void OnDestroy()
    {
        _auth.StateChanged -= AuthStateChanged;
        _auth = null;
    }

    // Handle initialization of the necessary firebase modules:
    void InitializeFirebase()
    {
        Debug.Log("Setting up Firebase Auth");
        _auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
        _auth.StateChanged += AuthStateChanged;
        AuthStateChanged(this, null);
    }

    // Track state changes of the auth object.
    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);
            }
        }
    }

    void OnClick_AnonymousLogin()
    {
        _auth.SignInAnonymouslyAsync().ContinueWith(task =>
        {
            if (task.IsCanceled)
            {
                Debug.LogError("SignInAnonymouslyAsync was canceled.");
                return;
            }
            if (task.IsFaulted)
            {
                Debug.LogError("SignInAnonymouslyAsync encountered an error: " + task.Exception);
                return;
            }

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

_anonymousLoginButton에 이미 생성한 버튼을 연결합니다.
Unity를 실행하고 로그인 버튼을 클릭합니다.
아래과 같이 User signed in successfully…. 가 나오면 계정이 생성된 것입니다.

Firebase 페이지에서도 확인합니다.
개발 - Authentication - 사용자

구글, 페이스북 로그인도 가이드를 보면 쉽게 적용할 수 있을 것입니다.
폰으로 실행했을 때는 앱 삭제 또는 앱 데이터 삭제를 하지 않는한 같은 id를 할당 받았는데, 유니티에서는 로그인할 때마다 다른 id를 할당 받았습니다. 이 부분은 좀 더 확인이 필요할 것 같고 처음 받은 id를 PlayerPrefs 등을 이용해 저장해 나중에도 사용하도록 하면 될것 같습니다.

다음엔 Database 를 사용하는 법을 적어 보겠습니다.