Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

Google Play 게임 서비스를 사용하여 Unity에서 인증

Google Play 게임 서비스를 사용하여 Firebase 및 Unity를 기반으로 하는 Android 게임에 플레이어를 로그인할 수 있습니다. Firebase로 Google Play 게임 서비스 로그인을 사용하려면 먼저 Google Play 게임으로 플레이어에 로그인하고 로그인할 때 OAuth 2.0 인증 코드를 요청하세요. 그런 다음 인증 코드를 PlayGamesAuthProvider 에 전달하여 Firebase에 인증하는 데 사용할 수 있는 Firebase 자격 증명을 생성합니다.

시작하기 전에

Unity 프로젝트 설정

  1. Unity 프로젝트에 Firebase 추가 에 설명된 대로 Firebase 구성 파일과 Firebase Unity SDK를 Unity 프로젝트에 추가합니다. Android용 지침을 따릅니다.

    FirebaseAuth.unitypackage 를 가져와야 합니다.

  2. Unity 에디터의 Build Settings > Player Settings > Other Settings 에서 게임의 Android 패키지 이름을 설정합니다.

  3. 그런 다음 Build Settings > Player Settings > Publishing Settings 아래에서 Android 패키지에 서명하는 데 사용할 키 저장소와 키를 선택하거나 만듭니다. Play 게임 로그인이 작동하려면 APK에 서명해야 합니다. 이 요구사항은 게시뿐만 아니라 게임 개발 중에도 적용됩니다.

Firebase 프로젝트 설정

  1. Firebase 콘솔 에서 Unity 프로젝트를 등록한 Firebase 프로젝트로 이동합니다.

  2. Unity에서 설정한 키를 사용하여 Firebase 콘솔의 설정 페이지에서 게임의 SHA-1 지문을 설정합니다.

    keytool 명령을 사용하여 키의 SHA-1 지문을 가져올 수 있습니다.

    keytool -exportcert -list -v \
        -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE

    또는 signingReport 명령을 사용하여 서명 인증서의 SHA 해시를 가져올 수 있습니다.

    gradlew signingReport

    개발 중을 포함하여 이 키로 APK에 서명해야 합니다.

  3. Google Play 게임을 로그인 공급자로 활성화:

    1. 프로젝트의 웹 서버 클라이언트 ID와 클라이언트 암호를 찾으십시오. 웹 서버 클라이언트 ID는 Firebase 프로젝트를 Google Play 인증 서버에 식별합니다.

      이러한 값을 찾으려면:

      1. Google API 콘솔 자격 증명 페이지에서 Firebase 프로젝트를 엽니다.
      2. OAuth 2.0 클라이언트 ID 섹션에서 웹 클라이언트(Google 서비스에서 자동 생성) 세부정보 페이지를 엽니다. 이 페이지는 웹 서버 클라이언트 ID와 비밀을 나열합니다.
    2. 그런 다음 Firebase 콘솔 에서 인증 섹션을 엽니다.

    3. 로그인 방법 탭에서 Play 게임 로그인 공급자를 활성화합니다. API 콘솔에서 가져온 프로젝트의 웹 서버 클라이언트 ID와 클라이언트 암호를 지정해야 합니다.

Firebase 앱 정보로 Play 게임 서비스 구성

  1. Google Play Console 에서 Google Play 앱을 열거나 새로 만듭니다.

  2. 성장 섹션에서 Play 게임 서비스 > 설정 및 관리 > 구성 을 클릭합니다.

  3. 예, 내 게임은 이미 Google API 를 사용합니다를 클릭하고 목록에서 Firebase 프로젝트를 선택한 다음 사용 을 클릭합니다.

  4. Play 게임 서비스 구성 페이지에서 자격 증명 추가 를 클릭합니다.

    1. 게임 서버 유형을 선택합니다.
    2. OAuth 클라이언트 필드에서 프로젝트의 웹 클라이언트 ID를 선택합니다. Play 게임 로그인을 활성화할 때 지정한 클라이언트 ID와 동일한지 확인하세요.
    3. 변경 사항을 저장합니다.
  5. 계속해서 Play 게임 서비스 구성 페이지에서 자격 증명 추가 를 다시 클릭합니다.

    1. Android 유형을 선택합니다.
    2. OAuth 클라이언트 필드에서 프로젝트의 Android 클라이언트 ID를 선택합니다. (Android 클라이언트 ID가 표시되지 않으면 Firebase 콘솔에서 게임의 SHA-1 지문을 설정했는지 확인하세요.)
    3. 변경 사항을 저장합니다.
  6. 이벤트 , 업적리더보드 페이지에서 게임에 사용할 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>
    
  7. 테스터 페이지에서 Play 스토어에 게임을 출시하기 전에 게임에 로그인할 수 있어야 하는 사용자의 이메일 주소를 추가합니다.

Play 게임 로그인을 게임에 통합

  1. Unity용 Play 게임 플러그인 의 최신 릴리스를 다운로드하고 압축을 풉니다.

  2. 플러그인의 Unity 패키지를 Unity 프로젝트로 가져옵니다. 릴리스 아카이브의 current-build 디렉토리에서 Unity 패키지를 찾을 수 있습니다.

  3. Play 게임 플러그인 설정:

    1. 창 > Google Play 게임 > 설정 > Android 설정 을 클릭하여 Android 구성 화면을 엽니다.
    2. Play 콘솔에서 가져온 Android 리소스 스니펫을 리소스 정의 필드에 붙여넣습니다.
    3. Firebase 콘솔에서 Play 게임 로그인을 활성화할 때 제공한 웹 서버 클라이언트 ID를 클라이언트 ID 필드에 붙여넣습니다.
    4. 설정 을 클릭합니다.
  4. 게임에서 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();
    
  5. 그런 다음 플레이어가 Play 게임에 로그인하기로 선택하면 Social.localUser.Authenticate() 를 호출합니다.

    Social.localUser.Authenticate((bool success) => {
      // handle success or failure
    });
    

Firebase로 인증

게임에 Play 게임 로그인을 추가한 후 Play 게임 서비스의 인증 코드를 사용하여 Firebase에 인증할 수 있습니다.

  1. 플레이어가 Play 게임을 사용하여 성공적으로 로그인한 후 로그인 연속 처리기에서 플레이어 계정에 대한 인증 코드를 가져옵니다.

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. 그런 다음 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();