이번 글에서는 구글 계정으로 로그인 하는 방법을 정리해보자!
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를 생성
(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 개발자 계정이 없으면 안됨
'Unity 개발 > 기술 향상' 카테고리의 다른 글
[Unity] Unity에서 DLL과 Assembly Definition을 활용한 최적화 전략 (0) | 2025.03.03 |
---|---|
[Unity] Async/Await과 Coroutine의 차이점 (0) | 2025.02.27 |
[Unity] SHA 인증서 가져오기 (릴리즈 배포 환경 인증용) (0) | 2024.12.02 |
[Unity] SHA 인증서 가져오기 (테스트 환경) (0) | 2024.12.01 |
[Unity] 실행 순서 Awake, Start, OnEnable (0) | 2024.10.29 |