[ Firebase ] 25년 GPGS + Firebase 로그인
- 유니티 빌드 세팅
- GPGS 패키지 임포트
- Firebase Auth 패키지 임포트 및 설정
- 플레이 콘솔 설정
- 스크립트 작성
- 빌드 뽑기
[ 유니티 빌드 세팅 ]
1 . 플랫폼 세팅
[ 플랫폼 세팅 ]
유니티 버전 - 2022.3.61f1을 사용하였다 .
플랫폼은 Android로 변경 .
2 . Player Setting
[ Player Setting ]
- Package Name : 해당값은 구글 플레이 , Firebase에서 쓰이기에 저장해놓는다 . 값이 틀려지면 문제가 생길것이다 .
- Minimum/Target API Level : 일단 오류가 안나는 최소값으로 맞춰주었다 . Target값은 최대로 올려도 좋을 것 같다 .
- Scripting Backend : IL2PP 로 변경
- ARM64 : IL2PP로 변경함에 따라 같이 체크해야 한다 .
3 . Key Store 생성하기
[ Keystore 생성 ]
keystore를 생성해준다 .
https://docs.unity3d.com/kr/2021.2/Manual/android-keystore-manager.html
Android 키스토어 관리자 - Unity 매뉴얼
키스토어 관리자는 Android 키스토어 및 키를 생성, 설정 또는 로드할 수 있는 창입니다. 자세한 내용은 Android의 키, 인증서, 키스토어 문서를 참조하십시오.
docs.unity3d.com
- 패스워드 , alias(별명)를 기입한 이후 Add Key로 생성해준다 .
[ SHA-1인증서 발급받기 ]
- 키스토어가 있는 곳으로 이동 , 다음의 명령어를 cmd창에서 실행한다 .
keytool -list -v -keystore keyname.keystore
- 비밀번호를 입력한다 . 이때 , 비밀번호가 입력되는게 보이지 않는다 .
- 이제 SHA1 , SHA 256을 얻었다 . 곧 사용할 일이 있으니 저장해두자 .
SHA1: 02:0B:D3:77:B6:1E:81:19:A7:77:7B:B5:4B:DF:5B:DE:1E:2F:66:B2
SHA256: 36:42:15:CD:7D:8E:E3:46:3B:39:7A:31:5F:71:89:AA:E0:36:33:36:DA:5C:DF:5A:00:47:79:55:EC:18:C5:3C
[ GPGS 패키지 임포트 ]
1 . SDK 선정하기
구분 | GPGS V2 | GPGS V1 | Sign with Google |
로그인 정보 | PGS games_lite 정보 이용 | 구글 계정 정보 이용 | 구글 계정 정보 이용 |
계정간 호환 | GPGS V2 단독 GPGS V1 및 Sign In with Google 호환 불가 |
Sign In with Google 호환 GPGS V2 호환 불가 |
GPGS V1 호환 GPGS V2 호환 불가 |
iOS 지원 | 미지원 | 미지원 | 지원 |
위 기준에 따라 GPGS v2와 Sign with Google을 선택해야했다 .
Sign With Google은 18년이 마지막 업데이트고 ios연동에서 문제가 생긴 기억이 있어 GPGS v2로 사용하게 되었다 .
2 . GPGS V2 패키지 임포트
[ 패키지 임포트 ]
https://github.com/playgameservices/play-games-plugin-for-unity
GitHub - playgameservices/play-games-plugin-for-unity: Google Play Games plugin for Unity
Google Play Games plugin for Unity. Contribute to playgameservices/play-games-plugin-for-unity development by creating an account on GitHub.
github.com
- Release를 클릭
- Source code를 클릭하여 다운로드
- play-games-plugin-for-unity-2.0.0 / current-build 내부에 있는 패키지를 임포트 하자 .
[ Firebase Auth 패키지 임포트 ]
1 . Firebase 프로젝트 생성하기
새 프로젝트를 생성하자
- Default Account for Firebase 선택후 프로젝트 만들기
2 . Firebase에 앱 추가하기
- Unity를 클릭하여 앱을 추가 .
- 아까 생성한 Andoird 패키지 이름을 넣어준다 .
3 . 구성파일 추가 및 Auth 패키지 임포
- 구성파일을 다운받자 .
- 이렇게 넣어주는 편이다 .
- SDK 다운로드하고 , 이중에서 FirebaseAuth 패키지를 임포트해준다 .
4 . Firebase 프로젝트에 SHA-1 / 256 지문 추가하기
- 파이어베이스 프로젝트 설정에서 디지털 지문 추가로 Keystore에서 얻은 디지털 지문 SHA - 1 / SHA - 256을 넣어준다 .
5 . Autentication에 Google 추가
- Firebase의 Authentication에서 로그인 방법 - Google을 클릭하여 추가 .
- 다시 Google Cloud Platform으로 이동해보면 Web Client가 생성됨을 볼 수 있다
- (이 단계는 아래에서 Oath 동의화면까지 완료되어야 나올 수 도 있다 .)
- 클라이언트 ID 뿐 아니라 클릭해보면 클라이언트 보안 비밀번호도 알 수 있다 . 둘다 저장해두자
5 . Autentication에 Play 게임즈 추가
- Play 게임즈도 클릭하여 추가해준다 ! 이때 클라이언트 ID와 비밀번호는 위에서 얻은 웹 애플리키에션의 클라이언트 ID와 비밀번호를 넣어준다 .
- 이제 두가지 로그인 제공업체가 채워졌다 .
[ Play Console 설정 ]
1 . 앱 만들기
- 플레이 콘솔에서 앱을 만든다 .
2 . 내부 테스트
- 대시보드에서 내부 테스트를 생성하자 .
- 다시 유니티로 돌아와서 일단 aab 파일의 생성이 필요하다 .
Build Setting에서 Build App Bundle을 체크한 이후 빌드를 진행한다 .
- 해당 빌드를 내부 테스트 버전에 넣어준다
- 여기까지 했다면 업로드키 인증서가 생겼을것이다 .
3 . Play 게임즈 서비스 설정
- 사용자 늘리기 ->Play 게임즈 서비스 - 설정 에서 새 Play 게임즈 서비스 프로젝트를 만들자 .
- 클라우드 프로젝트에는 기존에 만들었던 Firebase 프로젝트가 있을 것이다 . 해당 프로젝트 선택
4 . 사용자 인증 정보 추가
[ OAuth 동의 화면 만들기 ]
- 이제 사용자 인증 정보를 추가해야 한다 .
- 그전에 OAuth 동의화면을 구성하자 . 상단의 Google Cloud Platform 에서 보기 선택
- 좌측에서 OAth 동의 화면을 선택 , 만들어준다 .
- 앱정보에 나의 앱이름과 사용자 지원 이메일을 넣어준다 .
- 4번까지 진행후 만들기 클릭.
[ OAuth 클라이언트 만들기 - 업로드 ]
이제 Oath 클라이언트를 만들자 .
- 패키지 이름에는 유니티 프로젝트의 패키지 이름을 넣어준다 .
- SHA-1인증서 디지털 지문에는 아까 키스토어에서 추출한 SHA-1 를 넣어준다 .
[ OAuth 클라이언트 만들기 - 앱서명 ]
- 다시 설정 - 앱서명으로 이동한 이후 앱 서명 키 인증서의 SHA-1 인증서 지문을 복사 .
- 이렇게 두개의 OAuth 클라이언트가 생성된다 .
[ 사용자 인증 정보 추가 ]
- Play 게임즈 서비스에 들어가서 설정 - 사용자 인증 정보 우측 상단 사용자 인증 정보 추가를 클릭
- 아까 생성한 Oauth 클라이언트를 추가한다 .
[ 스크립트 작성 ]
1 . Play Games Setup
- Window - Google Play Games - Setup - Android Setup 을 눌러 위의 창을 띄운다 .
- 구글 플레이 콘솔에서 사용자 늘리기 - Play 게임즈 서비스 - 설정 및 관리 - 설정에서 사용자 인증 정보 우측에 있는 리소스 보기
- 여기서 Android (xml)의 값을 복사하여 REsources Definiton에 붙여넣어준다 .
- 아까 생성했던 Web Client의 ID를 위 Client ID에 넣어준다 .
2 . 버그 해결
java.lang.ClassNotFoundException: com.google.android.gms.games.Games
이대로 그냥 빌드후 실행하였더니 해당 문제를 겪게 되었다 .
https://github.com/playgameservices/play-games-plugin-for-unity/issues/3154
java.lang.ClassNotFoundException: com.google.android.gms.games.PlayGames · Issue #3154 · playgameservices/play-games-plugin-fo
Unity version: 2021.3 LTS Google Play Games Plugin for Unity version: 0.11.01 I configured everything in the right way, it's been days I am following the documentations, looking for answers and try...
github.com
이후 위의 해결책을 적용하였다 .
- PlayerSettings->Publishing Setting->Build->Custom progard File 체크
- Progard.txt를 연다 [ Plugin/ Android/ progard-user.txt]
- play-games-plugin-for-unity-2.0.0\play-games-plugin-for-unity-2.0.0\scripts\proguard.txt”에 있는 값을 복사 ,붙여넣었다
3 . 스크립트 작성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using GooglePlayGames;
using GooglePlayGames.BasicApi;
using Firebase.Auth;
public class LogInTester : MonoBehaviour
{
FirebaseAuth auth;
public TextMeshProUGUI logText;
void Start()
{
PlayGamesPlatform.DebugLogEnabled = true;
PlayGamesPlatform.Activate();
auth = FirebaseAuth.DefaultInstance;
}
public void Click()
{
PlayGamesPlatform.Instance.ManuallyAuthenticate(ProcessAuth);
}
internal void ProcessAuth(SignInStatus status)
{
if (status == SignInStatus.Success)
{
logText.text = "Sucess";
GetServerSideAccess();
}
else
{
logText.text = "Fail";
}
}
public void GetServerSideAccess()
{
try
{
PlayGamesPlatform.Instance.RequestServerSideAccess(false, authCode =>
{
FirebaseLogin(authCode);
});
}
catch (System.Exception e)
{
logText.text += e.ToString();
}
}
void FirebaseLogin(string authCode)
{
try
{
var credential = PlayGamesAuthProvider.GetCredential(authCode);
auth.SignInWithCredentialAsync(credential).ContinueWith(task =>
{
if (task.IsCanceled)
{
logText.text += "Cancel";
}
else if (task.IsFaulted)
{
logText.text += "Failed";
}
else
{
logText.text += "Success";
}
});
}
catch (System.Exception e)
{
Debug.Log(e.ToString());
}
}
}
사실 가장 문제가 되었던건 GPGS V2에서 GetIDToken / RequesetServerAuthCode등의 메서드가 사라진 것이다 .
근데 대부분의 블로그 , 혹은 문서에서는 위 메서드를 쓰니 RequestServerSideAcess()메서드가 과연
PlayGamesAuthProvider에 들어가는 authCode인지 확실하지 않은 것이었다 .
에러가 발생했을때 , 이게 다른 문제인지 아니면 RequestServerSideAcess()메서드 자체가 안 맞는 값인지 모르니 .
여튼 다행히도 맞는 값이었고 ... 위 메서드로 파이어베이스 인증까지 가능하게 되었다 .
순서는 다음과 같다 .
- GPGS 로그인
- RequestServerSideAcess()로 토큰을 받음
- 받은 토큰으로 Firebase Auth에 인증
4 . 테스터 등록
- 테스터로 등록되어 있지 않다면 인증이 이루어지지 않는다 .
- 플레이 콘솔에서 위 경로를 통해 테스터를 등록하자 .
5 . 확인
- 여튼위 작업을 거치고 , 인증이 완료되면 사용자에 다음과 같이 등록된다 !