Unity/Unity 리서치

Unity Firebase 연동

lipnus 2021. 5. 15. 16:27
반응형

Firebase SDK import

'https://firebase.google.com/download/unity

 

 

document대로 dontnet4로 설치

이거 3개 import

 ① FirebabseAuth

 ② FirebaseAnalytics

 ③ FirebaseFirestore

 

 

 

Autentication

Oauth2.0 등 Google 연동은 이미 완료된 상태

Authentication / Google 사용

 

https://console.cloud.google.com/ API 서비스 / 사용자 인증 정보

OAuth2.0클라이언트 ID에 Web client 가 생성되어 있어야 함.

 

프로젝트 설정 / sdk 설정 및 구성

디지털 지문을 추가 (SHA1, SHA256) 서비스용, 테스트용 총 4개 넣음

 

 

google-service.json을 다운 받아. Unity 프로젝트 폴더 -> Assets폴더 안에 넣음

 

using System.Collections;
using UnityEngine;
using GooglePlayGames;
using GooglePlayGames.BasicApi;
using UnityEngine.UI;
using Firebase.Auth;

public class AuthTest : MonoBehaviour
{
    private FirebaseAuth auth;

    public Text loginStatusText;

    private void Start()
    {
        PlayGamesPlatform.InitializeInstance(new PlayGamesClientConfiguration.Builder()
            .RequestIdToken()
            .RequestEmail()
            .Build());
        PlayGamesPlatform.DebugLogEnabled = true;
        PlayGamesPlatform.Activate();     

        auth = FirebaseAuth.DefaultInstance;   
    }

    public void Login()
    {
        Debug.Log($"SSS Social.localUser.authenticated: {Social.localUser.authenticated}");
        
        if(!Social.localUser.authenticated)
        {
            Social.localUser.Authenticate((bool isSuccess) =>
            {
                if(isSuccess)
                {
                    loginStatusText.text = $"Success \n{Social.localUser.userName} \n{Social.localUser.id}";
                }
                else
                {
                    loginStatusText.text = "Fail";
                }
            }
            );
        }
        else
        {
            loginStatusText.text = "Already Logined.";
        }
    }

    public void Logout()
    {
        ((PlayGamesPlatform)Social.Active).SignOut();
        loginStatusText.text = "Logout";
    }

    public void CheckName() {
        if(Social.localUser.authenticated)
        {
            loginStatusText.text = $"{Social.localUser.userName.ToString()} / {Social.localUser.id.ToString()}";
        }
        else
        {
            loginStatusText.text = "Not Logined.";
        }
    }



public void FirebaesLogin()
    {
        if (!Social.localUser.authenticated)
        {
            Social.localUser.Authenticate(success => 
            {
                if (success)
                {
                    loginStatusText.text = "Firebase Login Success";
                    StartCoroutine(RunFirebaseLogin()); 
                }
                else
                {
                    loginStatusText.text = "Firebase Login Fail";
                }
            });
        }
    }
 
 
    public void FirebaseLogout()
    {
        if (Social.localUser.authenticated) 
        {
            PlayGamesPlatform.Instance.SignOut(); 
            auth.SignOut();
            loginStatusText.text = "Firebase Logout";
        }
    }

    IEnumerator RunFirebaseLogin() 
    {
        while (string.IsNullOrEmpty(((PlayGamesLocalUser)Social.localUser).GetIdToken()))
        {
            yield return null;
        }
        string idToken = ((PlayGamesLocalUser)Social.localUser).GetIdToken();
        Credential credential = GoogleAuthProvider.GetCredential(idToken, null);

        auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
            if (task.IsCanceled)
            {
                Debug.LogError("SignInWithCredentialAsync was canceled.");
                return;
            }
            if (task.IsFaulted)
            {
                Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
                return;
            }
 
            Debug.Log("Firebase Success");
        });

    }
}

위처럼 샘플코드를 작성하고,

 

 

로그인 해보면 이지랄

InitializationException : Firebase app creation failed.

유니티 2020버전 자체 버그라고 함.

어디서 보고 버전을 2019.3.15f로 Downgrade하니 빌드도 꼬이고 망함.

 

Solution

① 2019.3.15f 로 프로젝트를 새로 생성. (Cosole 관련은 이미 다 해놨으니 Unity만 설정)

② Firebase SDK를 Google Play Service SDK 보다 먼저 import함.

둘중에 뭐가 문제인지는 모름.

 

 

 

성공

 

Reference

여기 포스팅 중간 뛰어넘고 Firebase바로 설정하는 부분 따라하는게 가장 오류가 적은 것 같음.

https://inyongs.tistory.com/35

 

[Unity 이론] Google + Firebase 로그인

Google + Firebase 로그인 Firebase에서 Google 회원가입 및 로그인을 하는 방법을 알아보겠습니다. Google Play Services와 Firebase를 연동시킨다고 생각하면 되겠습니다. 이번 글에서 할 것은 1. GooglePlayGam..

inyongs.tistory.com

 

반응형