유니티 온라인 대전 공부 2 - Firebase를 통한 계정 인증 과정
2023. 9. 7. 01:57ㆍUnity/유니티(기본)
728x90
반응형
유니티 멀티플레이어 네트워크 게임 한방에 만들기
www.youtube.com
이 글의 모든 내용은 위 동영상 강의 내용의 학습 내용 요약본임.
using Firebase;
using Firebase.Auth;
using Firebase.Extensions;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class AuthManager : MonoBehaviour
{
public bool IsFirebaseReady { get; private set; }
public bool IsSignInOnProgress { get; private set; }
public InputField emailField;
public InputField passwordField;
public Button signInButton;
public static FirebaseApp firebaseApp;
public static FirebaseAuth firebaseAuth;
public static FirebaseUser User;
public void Start()
{
// 1. 준비가 되지 않았는데, Sign In 버튼이 눌리는 것을 방지함
signInButton.interactable = false;
// 2. Firebase 사용 가능 여부를 검사함
// Async 메소드이기 때문에 실행하자 말자, 완료를 기다리지 않고 다음으로 넘어감
// 따라서 이 메소드가 끝나고나서 뭔가를 실행하려면 Call Back이나 Chain을 걸어야 함
// ㄴ> ContinueWith()
// 만약 ContinueWith()가 에러가 있다면, ContinueWithOnMainThread() 사용
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task =>
{
var result = task.Result;
if (result != DependencyStatus.Available)
{
// 3. Firebase 사용 불가능한 경우의 처리
Debug.LogError(result.ToString());
IsFirebaseReady = false;
}
else
{
// 4. Firebase 사용 가능한 경우의 처리
IsFirebaseReady = true;
// Firebase앱의 전체적인 기능을 관리하는 오브젝트를 firebaseApp에 가져옴
firebaseApp = FirebaseApp.DefaultInstance;
firebaseAuth = FirebaseAuth.DefaultInstance;
}
signInButton.interactable = IsFirebaseReady;
}
);
}
public void SignIn()
{
if (!IsFirebaseReady || IsSignInOnProgress || User != null)
return;
IsSignInOnProgress = true;
signInButton.interactable = false;
// 5. SignInWithEmailAndPasswordAsyn를 이용하여 이메일 계정 인증
// 만약 구글이나 애플 계정을 이용(외부 서비스를 사용)하여 인증한다면 SignInWithCredentialAsync를 이용
// ㄴ> 토큰을 생성하여 처리하는 과정이 필요함
firebaseAuth.SignInWithEmailAndPasswordAsync(emailField.text, passwordField.text).ContinueWithOnMainThread(task =>
{
// 현재 로그인 상태를 출력
Debug.Log($"Sign in status : {task.Status}");
IsSignInOnProgress = false;
signInButton.interactable = true;
if(task.IsFaulted)
{
// 제대로 동작하지 않아서 task가 실패했을때의 출력
Debug.LogError(task.Exception);
}
else if(task.IsCanceled)
{
// 모종의 이유로 중단된 경우의 출력
Debug.LogError("Sign-in canceled");
}
else
{
// 6. 사용자 인증에 성공하여 로그인 한 경우, Lobby 씬으로 이동한다
// 이때, 씬 이동전에 사용자의 정보(이메일)을 출력함
User = task.Result.User;
Debug.Log(User.Email);
SceneManager.LoadScene("Lobby");
}
}
);
}
}
728x90
반응형
'Unity > 유니티(기본)' 카테고리의 다른 글
UNITY에서 한글 텍스트 파일이 깨져서 읽어질때(안읽어질때) (1) | 2023.11.29 |
---|---|
유니티 온라인 대전 공부 1 - 설치 및 세팅 (1) | 2023.09.06 |