Unity Firebase 연동
Firebase SDK import



이거 3개 import
① FirebabseAuth
② FirebaseAnalytics
③ FirebaseFirestore
Autentication
Oauth2.0 등 Google 연동은 이미 완료된 상태


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

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

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