반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

가끔 보자, 하늘.

Unity 에서 Firebase 연동하기 - 초기 설명 및 익명 사용자 허용 설정 본문

개발 이야기/개발 및 서비스

Unity 에서 Firebase 연동하기 - 초기 설명 및 익명 사용자 허용 설정

가온아 2024. 12. 20. 00:23

(* 이 글은 unity6, 2024/12 를 기준으로 작성되었습니다.)

주로 AWS만 사용하다 혼자 모바일 게임을 준비하다보니 비용이 거의 들지 않는 방법으로 게임 백엔드를 대체할 인프라가 필요해 정리해 보았습니다. AI로 텍스트 결과만 보면서 진행하기 힘드신 분들에게 도움이 되기를 바라며 오랜만에 정리해 봅니다.

간단한 설정만으로 사용자 정보를 연동할만한 서비스에 Playfab이나 Firebase가 적당하다고 AI님이 말씀하셔서 그래도 Firebase가 구글 연동에 더 편할 듯(아무런 근거는 없지만..) 해서 선택했습니다.

Firebase 홈페이지에서 Unity SDK Package를 다운받고 Firebase Auth 패키지를 설치한 후 https://console.firebase.google.com/ 에 접속해 프로젝트를 생성하세요.

그리고 안드로이드를 선택해 앱을 추가합니다.

우선 유니티 에디터에서 연동하는걸 목표로 하는 것이니 패키지 이름과 앱 닉네임만 입력하고 앱을 등록합니다.

그리고 구성 파일(안드로이드는 )을 다운받아 Assets 폴더 바로 아래 배치합니다.

그리고 firebase console 에서 Authentication으로 들어가 

로그인 방법 -> 새 공급업체 추가를 선택 후 익명을 선택해 사용을 허가합니다.

이제 유니티로 돌아가 아래 코드를 적절한 곳에 배치하세요.

.
.
.
private void InitializeFirebase()
    {
        try 
        {
            FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
                if (task.Exception != null)
                {
                    Debug.LogError($"Firebase 초기화 실패: {task.Exception}");
                    // macOS 보안 관련 에러 메시지 추가
                    if (Application.platform == RuntimePlatform.OSXEditor || 
                        Application.platform == RuntimePlatform.OSXPlayer)
                    {
                        Debug.LogWarning("macOS에서 Firebase SDK 번들 권한 문제가 발생했습니다. " +
                                       "시스템 환경설정 > 보안 및 개인 정보 보호에서 앱 실행을 허용해주세요.");
                    }
                    return;
                }

                var dependencyStatus = task.Result;
                if (dependencyStatus == DependencyStatus.Available)
                {
                    try
                    {
                        auth = FirebaseAuth.DefaultInstance;
                        auth.StateChanged += AuthStateChanged;
                        SignInAnonymously();
                    }
                    catch (Exception e)
                    {
                        Debug.LogError($"Firebase Auth 초기화 실패: {e}");
                    }
                }
                else
                {
                    Debug.LogError($"Firebase 의존성 해결 실패: {dependencyStatus}");
                }
            });
        }
        catch (Exception e)
        {
            Debug.LogError($"Firebase 초기화 중 예외 발생: {e.Message}");
        }
    }

  // 익명 인증 처리
    private void SignInAnonymously()
    {
        if (auth == null)
        {
            Debug.LogError("Firebase Auth가 초기화되지 않았습니다");
            return;
        }

        auth.SignInAnonymouslyAsync().ContinueWithOnMainThread(task => {
            if (task.IsCanceled)
            {
                Debug.LogError("인증이 취소되었습니다");
                return;
            }
            if (task.Exception != null)
            {
                Debug.LogError($"인증 실패: {task.Exception}");
                return;
            }

            currentUser = task.Result.User;
            Debug.Log($"익명 인증 성공. UserId: {currentUser.UserId}");
        });
    }


    // 인증 상태 변경 처리
    private void AuthStateChanged(object sender, EventArgs e)
    {
        if (auth.CurrentUser != currentUser)
        {
            bool signedIn = auth.CurrentUser != null;
            if (signedIn)
            {
                currentUser = auth.CurrentUser;
                Debug.Log($"사용자 로그인: {currentUser.UserId}");
            }
            else
            {
                currentUser = null;
                Debug.Log("사용자 로그아웃");
            }
        }
    }

그리고 실행하면 아래와 같은 결과가 보인다면 성공!

저는 맥에서 실행할때는 FirebaseCppApp-12_5_0.bundle 사용에 대한 이슈(개인정보 및 보안에서 허용 처리하면 됨.)가 있긴 했지만 큰 허들없이 바로 마무리 되었습니다.

다음은 저장 및 로딩 처리를 정리해 볼께요. :)

반응형