[유니티] Firebase 도입

sobokii·2024년 4월 19일
0

유니티

목록 보기
11/11

1. Firebase 설치

https://firebase.google.com/?hl=ko

설치 과정은 구글에서 제공하는 안내를 따라하면 손쉽게 할 수 있다.

2. 데이터 베이스 설정

Firestone Databse와 Realtime Database가 있는데,
개인적으로 지금 프로젝트는 실시간으로 데이터를 처리할 필요가 많이 없다고 느껴
Firestone을 선택했다.
(이후 확장성에서 유리하다는 것도 선택 기준이 되었다. 사실 복잡한 데이터를 다루지도 않을 것이지만 그래도 다양한 기능을 지원한다고 하니 마음이 끌렸다.)

  • 장단점 정리
    Firebase Realtime Database
    실시간 동기화: 사용자의 데이터가 실시간으로 업데이트되고 반영되어야 하는 경우에 적합합니다.
    단순한 데이터 구조: 하나의 큰 JSON 객체로 데이터가 관리되므로, 구조가 간단하고 접근이 빠를 때 유리합니다.
    비용: 대량의 데이터를 자주 읽고 쓸 경우 비용이 높아질 수 있습니다.
    Cloud Firestore
    확장성: 더 크고 복잡한 데이터 세트를 다룰 경우, Firestore의 확장성과 유연한 데이터 모델링이 유리합니다.
    복잡한 쿼리 지원: 사용자 데이터를 다양한 조건과 필터로 검색하거나 정렬할 필요가 있다면 Firestore의 쿼리 기능이 더 강력합니다.
    비용: Firestore는 읽기, 쓰기, 삭제 연산 기반으로 비용이 청구되므로, 쿼리의 효율성이 비용에 직접적인 영향을 미칩니다.

이후 환경 설정은 다음 절차를 따라한다.

설정 절차 링크

PlayerSettings는 Edit - Project Settings에 있다.

3. 문제 발생

Database URL not set in the Firebase config.
USE_AUTH_EMULATOR not set.

두 가지 메시지가 발생한다.
설치하라는거 다 했는데 뭐가 문제냔 말이냐.

에뮬레이터는 아직 지원안한다는 ... 챗GPT 피셜이다.
둘 다 무시해도 아무 일도 일어나지 않긴 한다.

4. 해결

첫 번째 메시지는 데이터베이스를 세팅해주고 (딕셔너리 형태로 만들어야 한다!)나서 사라졌다.
두 번째 메시지는... 그냥 계속 나오지만 아무런 문제는 없다.

아무튼 로그인 - 데이터 연동 작업이 전부 잘 되므로 현재 인식하는 문제는 없는 것으로...

언젠가 답을 알게되면 돌아오겠다.


5. 빌드 후 로그인 안되는 문제 발생

로그인이 안 된다!
로그인 시도는 하는데 auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith 이걸 실행하지를 못한다...

그래서 권한 문제인가 싶어 권한도 추가해보고 별짓을 다했으나 해결되지 않음
괜히 여기 밑에 package를 프로젝트 package 이름으로 변경하는 건 줄 알고 바꿨다가 (GPT가 시킴 ㅡㅡ) 하루를 날렸다. 이건 파이어베이스 내용이라 저렇게 써있는 것이 맞다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.google.firebase.app.unity"
          android:versionCode="1"
          android:versionName="1.0">
          <uses-permission android:name="android.permission.INTERNET" />
          <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

아무튼 빌드하면 로그인이 안 됨... 에디터에서는 로그인 잘만 됨...
네트워크 문제 없는데... 보안 문제도 없는 것 같은데 왜 그런지 모르겠다 ㅠㅠ

에디터 재설치, 재시작, 재빌드, 클린빌드, 파이어베이스 다시 설치, 기다려보기, ARM64로 수정, IL2CPP 세팅, internet access required, 플러그인 타겟 플랫폼 변경, 프로가드 체크, keystore 설정, sha-1, sha-256 지문 등록, continuewith MainThread로 변경, 로그캣 설치, 플레이 콘솔 어쩌고 만들기.. 다 해봄

해결했다!!!!

초기화 부분에 문제가 있는거였음

 Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
            var dependencyStatus = task.Result;
            if (dependencyStatus == Firebase.DependencyStatus.Available) {
				// 여기는 세팅 완료된 것 -> 여기로 auth 변수 할당 옮김
            } else {
                UnityEngine.Debug.LogError(System.String.Format(
                    "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
                output.text = $"파이어베이스 오류 :  {dependencyStatus}";
                
                // 여기는 세팅 실패한 것
            }
        });
        
        // auth 변수 할당을 여기서 했었다!

에디터에서는 할당을 이 구분 밖에서 해줘도 할당이 됐었는데 빌드에서는 안되었던 것. 세팅 완료 시점으로 할당 위치를 바꾸었다. (처리 속도 차이가 있는건지 이유는 자세히 모르겠음)
비동기 메서드여서 섬세하게 체크했어야했는데 바보같은... 한 구만리 돌아온 듯
코드 한 줄 위치 바꾸면 될 것을 ㅜㅜ

profile
직장 구하고 있습니다.

0개의 댓글