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

Firebase와 Unity 기반으로 개발된 Android 게임에서 플레이어가 Google Play 게임즈 서비스를 사용하여 로그인하도록 할 수 있습니다. Firebase에서 Google Play 게임즈 서비스 로그인을 사용하려면 우선 Google Play 게임즈에 플레이어를 로그인 처리하면서 OAuth 2.0 인증 코드를 요청합니다. 그런 다음 PlayGamesAuthProvider에 인증 코드를 전달하여 Firebase 사용자 인증 정보를 생성합니다. 이 인증 정보를 사용하여 Firebase에 인증할 수 있습니다.

시작하기 전에

Unity 프로젝트 설정

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

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

  2. Unity 편집기의 Build Settings(빌드 설정) > Player Settings(플레이어 설정) > Other Settings(기타 설정)에서 게임의 Android 패키지 이름을 설정합니다.

  3. 그런 다음 Build Settings(빌드 설정) > Player Settings(플레이어 설정) > Publishing Settings(게시 설정)에서 Android 패키지 서명에 사용할 키 저장소와 키를 선택하거나 만듭니다. APK를 서명해야 Play 게임즈 로그인이 작동합니다. 이 요구사항은 게시뿐 아니라 게임 개발 단계에도 적용됩니다.

Firebase 프로젝트 설정

  1. Firebase Console에서 Firebase 프로젝트로 이동합니다. 확인할 수 있습니다

  2. 다음과 같이 게임의 SHA-1 디지털 지문을 설정합니다. 설정 페이지 (Unity에서 설정한 키를 사용하여) Firebase 콘솔로 이동합니다.

    keytool 명령어로 키의 SHA-1 디지털 지문을 가져올 수 있습니다.

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

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

    gradlew signingReport

    개발 단계도 포함하여 이 키로 APK를 서명해야 합니다.

  3. Google Play Games를 로그인 제공업체로 사용 설정합니다.

    1. Firebase 콘솔에서 다음을 엽니다. Authentication 섹션.

    2. 프로젝트의 웹 서버 클라이언트 ID와 클라이언트 보안 비밀번호를 생성하고 가져옵니다.

      1. 로그인 방법 탭에서 Google 로그인 제공업체를 사용 설정합니다.

      2. Google 로그인 제공업체의 웹 서버 클라이언트 ID와 보안 비밀번호를 복사합니다.

    3. 로그인 방법 탭에서 Play Games 기능을 사용 설정합니다. 프로젝트의 웹 서버 클라이언트 ID 및 클라이언트 보안 비밀번호를 입력합니다.

Firebase 앱 정보로 Play Games services 구성

  1. Google Play 콘솔, Google Play 앱을 열거나 새로 만듭니다.

  2. 성장 섹션에서 Play Games services > 설정 및 관리 > 구성을 참조하세요.

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

  4. Play Games services 구성 페이지에서 다음을 클릭합니다. 사용자 인증 정보 추가.

    1. 게임 서버 유형을 선택합니다.
    2. OAuth 클라이언트 입력란에서 프로젝트의 웹 클라이언트 ID를 선택합니다. CANNOT TRANSLATE 이 ID는 네트워크 추가를 사용 설정할 때 지정한 것과 동일한 Play Games님이 로그인 중입니다.
    3. 변경사항을 저장합니다.
  5. Play Games services 구성 페이지에서 다음을 클릭합니다. 다시 사용자 인증 정보를 추가합니다.

    1. Android 유형을 선택합니다.
    2. OAuth 클라이언트 입력란에서 프로젝트의 Android 클라이언트 ID를 선택합니다. (Android 클라이언트 ID가 표시되지 않으면 게임의 Firebase 콘솔의 SHA-1 디지털 지문입니다.)
    3. 변경사항을 저장합니다.
  6. 이벤트, 업적, 리더보드 페이지에서 게임에 사용할 리소스가 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>
    
  7. 테스터 페이지에서 다음이 필요한 사용자의 이메일 주소를 추가합니다. Google Play에서 앱을 출시하기 전에 Play Store입니다.

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

  1. Unity용 Play 게임즈 플러그인의 최신 출시 버전을 다운로드하고 압축을 풉니다.

  2. 플러그인의 Unity 패키지를 Unity 프로젝트로 가져옵니다. 출시 보관파일의 current-build 디렉터리에서 Unity 패키지를 찾을 수 있습니다.

  3. Play 게임즈 플러그인을 설정합니다.

    1. Window > Google Play Games > Setup > Android Setup을 클릭하여 Android Configuration 화면을 엽니다.
    2. Play Console에서 가져온 Android 리소스 스니펫을 Resources Definition 필드에 붙여넣습니다.
    3. 사용 설정할 때 제공한 웹 서버 클라이언트 ID를 붙여넣습니다. Firebase 콘솔에서 클라이언트 ID로 Play 게임즈 로그인 필드를 확인합니다.
    4. Setup을 클릭합니다.
  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.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();