Unity/SDK

유니티 Firebase 구글 로그인 구현

홍삼맛 2024. 1. 15. 15:44

필수 과정

  • Firebase 사이트에서 테스트 프로젝트 생성
  • 프로젝트 기능으로 Authentication 등록
  • Unity에서 연동할 SDK와 google-services-json 파일 업로드
  • Android 빌드 맞춤과 Project Settings에서 user key 생성
  • 생성한 key에서 SHA 인증서 지문 등록
  • unity 패키지 이름 = Firebase 패키지 이름 맞추기 (com.company.name)
  • Google Web Client ID 준비
  • 구글 Signin 패키지 다운
 

Releases · googlesamples/google-signin-unity

Google Sign-In API plugin for Unity game engine. Works with Android and iOS. - googlesamples/google-signin-unity

github.com


기능 구현

FirebaseManager.cs

using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
using Firebase;
using Firebase.Auth;
using Firebase.Extensions;
using Google;
using TMPro;

public class FirebaseManager : MonoBehaviour
{
    private FirebaseAuth auth;
    
    private readonly string googleWebAPI = "구글 웹 클라이언트 ID";
    private GoogleSignInConfiguration configuration;
    private bool isSignin = false;

    public TextMeshProUGUI noticeText;
    public TextMeshProUGUI loginText;
    public Button signinBtn;

    private void Awake()
    {
        // Firebase 초기화
        FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task =>
        {
            if (task.IsCanceled || task.IsFaulted)
            {
                noticeText.text = "Firebase Initialize Failed";
                return;
            }

            noticeText.text = "Firebase Initialize Complete";
            FirebaseApp app = FirebaseApp.DefaultInstance;
            auth = FirebaseAuth.DefaultInstance;
            
            // 구글 SDK를 활용한 로그인 기능 등록
            configuration = new GoogleSignInConfiguration { WebClientId = googleWebAPI, RequestEmail = true, RequestIdToken = true };
        });
    }

    private void OnSignIn()
    {
        // 로그인, 로그아웃 구분
        if (!isSignin)
        {
            GoogleSignIn.Configuration = configuration;
            GoogleSignIn.Configuration.UseGameSignIn = false;
            GoogleSignIn.Configuration.RequestIdToken = true;
            GoogleSignIn.DefaultInstance.SignIn().ContinueWith(SignInWithGoogle);
        }
        else
        {
            GoogleSignIn.DefaultInstance.SignOut();
            loginText.text = "GOOGLE LOGIN";
        }

        isSignin = !isSignin;
    }

    private void SignInWithGoogle(Task<GoogleSignInUser> task)
    {
        // 구글 로그인
        Credential credential = GoogleAuthProvider.GetCredential(task.Result.IdToken, null);
        auth.SignInWithCredentialAsync(credential).ContinueWithOnMainThread(task =>
        {
            if (task.IsCanceled || task.IsFaulted)
            {
                noticeText.text= "Google Sign-In Failed";
                return;
            }

            noticeText.text = "Google Sign-In Successful!";
            loginText.text = "LOGOUT";
        });
    }
}