파이어베이스에서 프로젝트를 생성하고 Authentication을 시작한다.
로그인 제공업체에서 익명을 선택하고, 사용설정한다.
로그인 제공업체를 추가하고, Google을 사용설정한다.
구글 Cloud Console에서 파이어베이스에서 생성한 프로젝트로 들어간다. 해당 프로젝트의 사용자 인증 정보로 들어가면 파이어베이스가 자동 생성한 Web Client를 확인할 수 있다.
구글 Play Console의 프로젝트로 들어간다. Play 게임즈 서비스 설정으로 들어가서 파이어베이스에서 생성한 프로젝트를 선택하고 사용을 클릭한다.
사용자 인증 정보 추가를 선택하고, 게임서버와 게임 이름을 입력한후 파이어베이스에서 생성된 OAuth 클라이언트를 선택하고 저장한다.
Play 게임즈 서비스의 업적으로 들어가서 임시 업적을 만들고 저장한다.
업적의 리소스 보기로 들어가서 Android(XML) 리소스를 복사한다.
유니티에서 GooglePlayGamesPlugin(v0.10.14)를 임포트한다.
Android Setup에서 업적 리소스를 붙여넣기하고 Google Cloud의 사용자 인증정보에서 웹클라이언트 ID를 복사해서 붙여넣기하고 Setup을 해준다.
Firebase 콘솔의 프로젝트 설정으로 들어가서 안드로이드 앱을 추가한다.
앱을 등록한후 구성파일을 다운로드받아 유니티 프로젝트의 아무 폴더에 복사한다.
using System;
using UnityEngine;
using GooglePlayGames;
using GooglePlayGames.BasicApi;
using Firebase;
using Firebase.Auth;
using Firebase.Extensions;
public class Firebase : MonoBehaviour
{
public FirebaseAuth Auth { get; private set; }
public FirebaseUser User { get; private set; }
public bool IsLoggedIn { get; private set; }
public void Initialize()
{
var config = new PlayGamesClientConfiguration.Builder().RequestIdToken().Build();
PlayGamesPlatform.InitializeInstance(config);
PlayGamesPlatform.DebugLogEnabled = true;
PlayGamesPlatform.Activate();
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task =>
{
if (task.Result == DependencyStatus.Available)
{
Auth = FirebaseAuth.DefaultInstance;
Auth.StateChanged += OnAuthStateChanged;
}
else
{
Debug.LogError(string.Format("[FIREBASE] ERROR: {0}", task.Result));
}
});
}
void OnAuthStateChanged(object sender, EventArgs e)
{
IsLoggedIn = Auth.CurrentUser != null;
User = Auth.CurrentUser;
}
public void Login(Action<AuthResult> onSuccess, Action<string> onFail = null)
{
Auth.SignInAnonymouslyAsync().ContinueWithOnMainThread(task =>
{
if (task.IsCanceled)
{
onFail?.Invoke("CANCELED");
}
else if (task.IsFaulted)
{
onFail?.Invoke(task.Exception.Message);
}
else
{
onSuccess?.Invoke(task.Result);
}
});
}
public void LoginWithGoogle(Action<AuthResult> onSuccess, Action<string> onFail)
{
Social.localUser.Authenticate(success =>
{
if (success)
{
var idToken = ((PlayGamesLocalUser)Social.localUser).GetIdToken();
var credential = GoogleAuthProvider.GetCredential(idToken, null);
Auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWithOnMainThread(task =>
{
if (task.IsCanceled)
{
onFail?.Invoke("CANCELED");
}
else if (task.IsFaulted)
{
onFail?.Invoke(task.Exception.Message);
}
else
{
onSuccess?.Invoke(task.Result);
}
});
}
else
{
onFail?.Invoke("Failed to retrieve Google play games authorization code");
}
});
}
}