Firebase와 Unity 기반으로 개발된 Android 게임에서 플레이어가 Google Play 게임즈 서비스를 사용하여 로그인하도록 할 수 있습니다. Firebase에서 Google Play 게임즈 서비스 로그인을 사용하려면 우선 Google Play 게임즈에 플레이어를 로그인 처리하면서 OAuth 2.0 인증 코드를 요청합니다. 그런 다음 PlayGamesAuthProvider
에 인증 코드를 전달하여 Firebase 사용자 인증 정보를 생성합니다. 이 인증 정보를 사용하여 Firebase에 인증할 수 있습니다.
시작하기 전에
Unity 프로젝트 설정
Unity 프로젝트에 Firebase 추가에 설명된 대로 Firebase 구성 파일과 Firebase Unity SDK를 Unity 프로젝트에 추가합니다. Android용 안내를 따릅니다.
FirebaseAuth.unitypackage
를 가져와야 합니다.Unity 편집기의 Build Settings(빌드 설정) > Player Settings(플레이어 설정) > Other Settings(기타 설정)에서 게임의 Android 패키지 이름을 설정합니다.
그런 다음 Build Settings(빌드 설정) > Player Settings(플레이어 설정) > Publishing Settings(게시 설정)에서 Android 패키지 서명에 사용할 키 저장소와 키를 선택하거나 만듭니다. APK를 서명해야 Play 게임즈 로그인이 작동합니다. 이 요구사항은 게시뿐 아니라 게임 개발 단계에도 적용됩니다.
Firebase 프로젝트 설정
Firebase 콘솔에서 Unity 프로젝트를 등록한 Firebase 프로젝트로 이동합니다.
Unity에서 설정한 키를 사용하여 Firebase 콘솔의 설정 페이지에서 게임의 SHA-1 지문을 설정합니다.
keytool
명령어로 키의 SHA-1 디지털 지문을 가져올 수 있습니다.keytool -exportcert -list -v \ -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE
또는 gradle
signingReport
명령어를 사용하여 서명 인증서의 SHA 해시를 가져올 수 있습니다.gradlew signingReport
개발 단계도 포함하여 이 키로 APK를 서명해야 합니다.
Google Play Games를 로그인 제공업체로 사용 설정합니다.
Firebase Console에서 Authentication 섹션을 엽니다.
프로젝트의 웹 서버 클라이언트 ID와 클라이언트 보안 비밀번호를 생성하고 가져옵니다.
로그인 방법 탭에서 Google 로그인 제공업체를 사용 설정합니다.
Google 로그인 제공업체의 웹 서버 클라이언트 ID와 보안 비밀번호를 복사합니다.
로그인 방법 탭에서 Play Games 로그인 제공업체를 사용 설정하고 앞선 단계에서 얻은 프로젝트의 웹 서버 클라이언트 ID와 클라이언트 보안 비밀번호를 지정합니다.
Firebase 앱 정보로 Play Games services 구성
Google Play Console에서 Google Play 앱을 열거나 만듭니다.
성장 섹션에서 Play Games services > 설정 및 관리 > 구성을 클릭합니다.
예, 게임에서 이미 Google API를 사용하고 있습니다를 클릭하고 목록에서 Firebase 프로젝트를 선택한 후 사용을 클릭합니다.
Play Games services 구성 페이지에서 사용자 인증 정보 추가를 클릭합니다.
- 게임 서버 유형을 선택합니다.
- OAuth 클라이언트 입력란에서 프로젝트의 웹 클라이언트 ID를 선택합니다. 이 ID는 Play Games 로그인을 사용 설정할 때 지정한 클라이언트 ID와 일치해야 합니다.
- 변경사항을 저장합니다.
Play Games services 구성 페이지에서 다시 사용자 인증 정보 추가를 클릭합니다.
- Android 유형을 선택합니다.
- OAuth 클라이언트 입력란에서 프로젝트의 Android 클라이언트 ID를 선택합니다. (Android 클라이언트 ID가 표시되지 않는 경우 Firebase Console에서 게임의 SHA-1 디지털 지문을 설정해야 합니다.)
- 변경사항을 저장합니다.
이벤트, 업적, 리더보드 페이지에서 게임에 사용할 Play Games 리소스를 만듭니다. 이러한 리소스를 바로 사용하고 싶지 않다면 자리표시자 항목을 만들 수 있습니다. 그런 다음 이벤트, 업적, 리더보드 페이지 중 한 곳에서 리소스 가져오기를 클릭하고 편리한 위치에 Android 리소스 스니펫을 복사합니다. Google Play Games services 플러그인을 설정하는 데 스니펫이 필요합니다.
리소스 스니펫의 형식은 다음 예와 같습니다.
<?xml version="1.0" encoding="utf-8"?> <!-- Google Play game services IDs. Save this file as res/values/games-ids.xml in your project. --> <resources> <!-- app_id --> <string name="app_id" translatable="false">123456789000</string> <!-- package_name --> <string name="package_name" translatable="false">com.example.game</string> <!-- event Wiped Raid --> <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string> </resources>
테스터 페이지에서 Play Store에 게임을 출시하기 전에 게임에 로그인할 수 있어야 하는 사용자의 이메일 주소를 추가합니다.
게임에 Play 게임즈 로그인 통합
Unity용 Play 게임즈 플러그인의 최신 출시 버전을 다운로드하고 압축을 풉니다.
플러그인의 Unity 패키지를 Unity 프로젝트로 가져옵니다. 출시 보관파일의
current-build
디렉터리에서 Unity 패키지를 찾을 수 있습니다.Play 게임즈 플러그인을 설정합니다.
- Window > Google Play Games > Setup > Android Setup을 클릭하여 Android Configuration 화면을 엽니다.
- Play Console에서 가져온 Android 리소스 스니펫을 Resources Definition 필드에 붙여넣습니다.
- Firebase 콘솔에서 Play 게임즈 로그인을 사용 설정할 때 입력한 웹 서버 클라이언트 ID를 Client ID 필드에 붙여넣습니다.
- 설정을 클릭합니다.
게임에서
RequestServerAuthCode
설정을 사용 설정하여 Play 게임즈 클라이언트를 구성합니다.using GooglePlayGames; using GooglePlayGames.BasicApi; using UnityEngine.SocialPlatforms; using System.Threading.Tasks; PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder() .RequestServerAuthCode(false /* Don't force refresh */) .Build(); PlayGamesPlatform.InitializeInstance(config); PlayGamesPlatform.Activate();
그런 다음 플레이어가 Play 게임을 사용하여 로그인하도록 선택하면
Social.localUser.Authenticate()
를 호출합니다.Social.localUser.Authenticate((bool success) => { // handle success or failure });
Firebase에 인증
게임에 Play 게임즈 로그인을 추가한 후 Play 게임즈 서비스의 인증 코드를 사용하여 Firebase에 인증할 수 있습니다.
플레이어가 Play 게임으로 로그인한 후 로그인 지속 핸들러에서 플레이어 계정의 인증 코드를 가져옵니다.
Social.localUser.Authenticate((bool success) => { if (success) { authCode = PlayGamesPlatform.Instance.GetServerAuthCode(); } });
그런 다음 Play 게임즈 서비스의 인증 코드를 Firebase 사용자 인증 정보로 교환하고, Firebase 사용자 인증 정보를 사용하여 플레이어를 인증합니다.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance; Firebase.Auth.Credential credential = Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); });
다음 단계
사용자가 처음으로 로그인하면 신규 사용자 계정이 생성되어 사용자의 Play 게임즈 ID에 연결됩니다. 이 신규 계정은 Firebase 프로젝트에 저장되며 프로젝트의 모든 앱에서 사용자 식별에 사용할 수 있습니다.
게임에서 Firebase.Auth.FirebaseUser
객체로부터 사용자의 Firebase UID를 가져올 수 있습니다.
Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
string playerName = user.DisplayName;
// The user's Id, unique to the Firebase project.
// Do NOT use this value to authenticate with your backend server, if you
// have one; use User.TokenAsync() instead.
string uid = user.UserId;
}
Firebase 실시간 데이터베이스와 Cloud Storage 보안 규칙의 auth
변수에서 로그인한 사용자의 고유 사용자 ID를 가져온 후 이 ID를 통해 사용자가 액세스할 수 있는 데이터를 관리할 수 있습니다.
사용자의 Play 게임즈 플레이어 정보를 가져오거나 Play 게임즈 서비스에 액세스하려면 Play 게임즈 플러그인에서 제공하는 API를 사용하세요.
사용자를 로그아웃시키려면 SignOut()
을 호출합니다.
auth.SignOut();