Unity 개발/기술 향상

[Unity] Google 계정 로그인 연동

내공부방 2024. 12. 21. 20:49
반응형

이번 글에서는 구글 계정으로 로그인 하는 방법을 정리해보자! 

 

1. Firebase 프로젝트 설정 

(1) Firebase Console 접속

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

 

Firebase | Google's Mobile and Web App Development Platform

개발자가 사용자가 좋아할 만한 앱과 게임을 빌드하도록 지원하는 Google의 모바일 및 웹 앱 개발 플랫폼인 Firebase에 대해 알아보세요.

firebase.google.com

 

(2) Firebase Authentication 활성화

- 이제 만든 프로젝트에 들어가서 좌측 Authentication을 클릭

- 로그인 방법을 클릭한 후 구글을 누른 후 활성화 버튼 클릭 

 

(3) SHA-1 등록

- 아래 Unity 설정을 해주고 다시 오자!! 

- 아래 2번 절차 Unity 설정을 마쳤다면 SHA1도 가져오는데 성공을 했을 것 

- 아래와 같이 디지털 지문을 추가하여 SHA1을 넣는다

Firebase는 두 가지 유형의 인증서 지문을 지원하는데
1. SHA-1 : 앱에 대한 API 키와 OAuth 2 클라이언트를 만드는 데 사용
2. SHA-256 : Firebase 동적 링크를 구성하는 데 사용

 

(4) google-service.json 다운

- 위에 이미지에 보이는 google-service.json 파일을 다운!

 

2. Unity 설정  

(1) Unity Build -> Platform을 Android로 변경

(2) Unity Build -> Project Settings -> Player 탭 내 Publishing Settings 항목에 Keystore Manager를 눌러 keystore를 생성

Keystore를 생성하고 생성한 위치를 기억해두자

 

(3) 다음은 바로 위에 있는 Other Settings를 클릭한 뒤 아래와 같이 세팅 

 

(4) 등록한 keystore의 SHA-1 확인하기 

- 3번 절차에서 본인이 생성한 Keystore의 파일 위치로 이동한다.

- 해당 위치에 cmd 창을 열고 'keytool -list -v -keystore ***.keystore'를 입력 (***는 본인 keystore의 이름)

- Password를 입력하면 SHA1를 확인할 수 있다 그것을 복사 (Firebase에 등록하기 위함!)

- 이제 잠시 위에 1번 Firebase 프로젝트 설정의 3번 절차를 하고 오자

 

(5) 패키지 설치

- Firebase Console에서 디지털 키 등록과 google-service.json 파일을 다운받았다면 이제 Firebase 패키지를 import를 한다. (아까 1번 절차에서 Add Firebase SDK  다운 받은 것)

- FirebaseAuth.unitypackage를 임포트한다.

- 해당 경로에 들어가 Google Sign 패키지를 다운받고 임포트!! (https://github.com/googlesamples/google-signin-unity/releases)

 

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

- 임포트할 때 주의점은 패키지 내용 중 Parse 파일은 Task 관련 부분 경로 충돌이 발생하기 때문에 제외하고 임포트를 진행

- Google Version Handler 창이 뜨면 모두 Apply

 

(6) 세팅 및 코드 작성 

-  Assets -> External Dependency Manager -> Android Resolver -> Settings에 들어가 아래 이미지와 같이 세팅

- Assets -> External Dependency Manager -> Android Resolver - Resolver 클릭 

- FirebaseManager 스크립트 만들고 아래 코드 붙이기!

- 버튼을 클릭하여 로그인 하는 UI는 간단하게 만든다

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

public class FirebaseManager : MonoBehaviour
{
    //private GoogleSignInConfiguration configuration;
    //Firebase.DependencyStatus dependencyStatus = Firebase.DependencyStatus.UnavailableOther;
    Firebase.Auth.FirebaseAuth auth;
    Firebase.Auth.FirebaseUser user;

    [SerializeField]
    private TextMeshProUGUI test;

    public TextMeshProUGUI Username, UserEmail;
    public GameObject LoginScreen, ProfileScreen;

    private void Start()
    {
        InitFirebase();
    }

    void InitFirebase()
    {
        FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
            if (task.Result == DependencyStatus.Available)
            {
                auth = FirebaseAuth.DefaultInstance;
                Debug.Log("Firebase Auth initialized successfully.");
            }
            else
            {
                Debug.LogError("Could not resolve Firebase dependencies: " + task.Result);
            }
        });
    }

    public void GoogleSignInClick()
    {
        try
        {
            GoogleSignIn.Configuration = new GoogleSignInConfiguration
            {
                WebClientId = "키입력!!",
                RequestIdToken = true,
                UseGameSignIn = false,
                RequestEmail = true
            };

            GoogleSignIn.DefaultInstance.SignIn().ContinueWith(task =>
            {
                if (task.IsFaulted)
                {
                    test.text += "SignIn Error: " + task.Exception;
                }
                else if (task.IsCanceled)
                {
                    test.text += "SignIn Canceled: ";
                }
                else
                {
                    OnGoogleAuthenticatedFinished(task);
                }
            });
        }
        catch (Exception ex)
        {
            test.text += "GoogleSignInClick Exception: " + ex.Message;
        }
    }

    void OnGoogleAuthenticatedFinished(Task<GoogleSignInUser> task)
    {
        if (task.IsFaulted)
        {
            Debug.LogError("Faulted");
        }
        else if (task.IsCanceled)
        {
            Debug.LogError("Cancelled");
        }
        else
        {
            Firebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(task.Result.IdToken, null);

            auth.SignInWithCredentialAsync(credential).ContinueWithOnMainThread(task => {
                if (task.IsCanceled)
                {
                    return;
                }

                if (task.IsFaulted)
                {
                    Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
                    return;
                }

                user = auth.CurrentUser;

                Username.text = user.DisplayName;
                UserEmail.text = user.Email;

                LoginScreen.SetActive(false);
                ProfileScreen.SetActive(true);

                // StartCoroutine(LoadImage(CheckImageUrl(user.PhotoUrl.ToString())));
            });
        }
    }
}

 

(7) WebClient ID 가져오기 

- 처음 로그인을 활성화했던 Authentication 탭 -> 로그인 방법 -> 구글 클릭! 

- 아래 이미지와 같이 웹 클라이언트 ID를 복사하여 위에 공유한 스크립트에 ID값을 넣는다

- 다시 Assets -> External Dependency Manager -> Android Resolver - Resolver 클릭

 

 

 

** 추가적인 작업 !!!!!!**

 

1. 해당 경로에 들어가 google-signin-support-1.0.4를 클릭하고 Android 체크

 

2. Google Play Console 개발자 계정이 없으면 안됨

반응형