Google Play 게임 서비스를 사용하여 Firebase 및 Unity를 기반으로 하는 Android 게임에 플레이어를 로그인할 수 있습니다. 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 패키지에 서명하는 데 사용할 키 저장소와 키를 선택하거나 만듭니다. Play 게임 로그인이 작동하려면 APK에 서명해야 합니다. 이 요구사항은 게시뿐만 아니라 게임 개발 중에도 적용됩니다.
Firebase 프로젝트 설정
Firebase 콘솔 에서 Unity 프로젝트를 등록한 Firebase 프로젝트로 이동합니다.
Unity에서 설정한 키를 사용하여 Firebase 콘솔의 설정 페이지에서 게임의 SHA-1 지문을 설정합니다.
keytool
명령을 사용하여 키의 SHA-1 지문을 가져올 수 있습니다.keytool -exportcert -list -v \ -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE
또는
signingReport
명령을 사용하여 서명 인증서의 SHA 해시를 가져올 수 있습니다.gradlew signingReport
개발 중을 포함하여 이 키로 APK에 서명해야 합니다.
Google Play 게임을 로그인 공급자로 활성화:
프로젝트의 웹 서버 클라이언트 ID와 클라이언트 암호를 찾으십시오. 웹 서버 클라이언트 ID는 Firebase 프로젝트를 Google Play 인증 서버에 식별합니다.
이러한 값을 찾으려면:
- Google API 콘솔 자격 증명 페이지에서 Firebase 프로젝트를 엽니다.
- OAuth 2.0 클라이언트 ID 섹션에서 웹 클라이언트(Google 서비스에서 자동 생성) 세부정보 페이지를 엽니다. 이 페이지는 웹 서버 클라이언트 ID와 비밀을 나열합니다.
그런 다음 Firebase 콘솔 에서 인증 섹션을 엽니다.
로그인 방법 탭에서 Play 게임 로그인 공급자를 활성화합니다. API 콘솔에서 가져온 프로젝트의 웹 서버 클라이언트 ID와 클라이언트 암호를 지정해야 합니다.
Firebase 앱 정보로 Play 게임 서비스 구성
Google Play Console 에서 Google Play 앱을 열거나 새로 만듭니다.
성장 섹션에서 Play 게임 서비스 > 설정 및 관리 > 구성 을 클릭합니다.
예, 내 게임은 이미 Google API 를 사용합니다를 클릭하고 목록에서 Firebase 프로젝트를 선택한 다음 사용 을 클릭합니다.
Play 게임 서비스 구성 페이지에서 자격 증명 추가 를 클릭합니다.
- 게임 서버 유형을 선택합니다.
- OAuth 클라이언트 필드에서 프로젝트의 웹 클라이언트 ID를 선택합니다. Play 게임 로그인을 활성화할 때 지정한 클라이언트 ID와 동일한지 확인하세요.
- 변경 사항을 저장합니다.
계속해서 Play 게임 서비스 구성 페이지에서 자격 증명 추가 를 다시 클릭합니다.
- Android 유형을 선택합니다.
- OAuth 클라이언트 필드에서 프로젝트의 Android 클라이언트 ID를 선택합니다. (Android 클라이언트 ID가 표시되지 않으면 Firebase 콘솔에서 게임의 SHA-1 지문을 설정했는지 확인하세요.)
- 변경 사항을 저장합니다.
이벤트 , 업적 및 리더보드 페이지에서 게임에 사용할 Play 게임 리소스를 만듭니다(즉시 사용하지 않으려면 자리 표시자 항목을 만들 수 있음). 그런 다음 Events , Achievements 또는 Leaderboards 페이지에서 리소스 가져오기를 클릭하고 Android 리소스 스니펫을 편리한 위치에 복사합니다. Google Play 게임 서비스 플러그인을 설정하려면 스니펫이 필요합니다.
리소스 스니펫은 다음 예와 같습니다.
<?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 스토어에 게임을 출시하기 전에 게임에 로그인할 수 있어야 하는 사용자의 이메일 주소를 추가합니다.
Play 게임 로그인을 게임에 통합
Unity용 Play 게임 플러그인 의 최신 릴리스를 다운로드하고 압축을 풉니다.
플러그인의 Unity 패키지를 Unity 프로젝트로 가져옵니다. 릴리스 아카이브의
current-build
디렉토리에서 Unity 패키지를 찾을 수 있습니다.Play 게임 플러그인 설정:
- 창 > Google Play 게임 > 설정 > Android 설정 을 클릭하여 Android 구성 화면을 엽니다.
- Play 콘솔에서 가져온 Android 리소스 스니펫을 리소스 정의 필드에 붙여넣습니다.
- Firebase 콘솔에서 Play 게임 로그인을 활성화할 때 제공한 웹 서버 클라이언트 ID를 클라이언트 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.SignInWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.FirebaseUser newUser = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", newUser.DisplayName, newUser.UserId); });
다음 단계
사용자가 처음 로그인하면 새 사용자 계정이 생성되어 Play 게임 ID에 연결됩니다. 이 새 계정은 Firebase 프로젝트의 일부로 저장되며 프로젝트의 모든 앱에서 사용자를 식별하는 데 사용할 수 있습니다.
게임에서 Firebase.Auth.FirebaseUser
객체에서 사용자의 Firebase UID를 가져올 수 있습니다.
Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
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를 가져와 사용자가 액세스할 수 있는 데이터를 제어하는 데 사용할 수 있습니다.
사용자의 Play 게임 플레이어 정보를 얻거나 Play 게임 서비스에 액세스하려면 Play 게임 플러그인에서 제공하는 API를 사용하세요.
사용자를 로그아웃하려면 SignOut()
을 호출하십시오.
auth.SignOut();