Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

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

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

시작하기 전에

Android 프로젝트 설정

  1. 아직 추가하지 않았다면 Android 프로젝트에 Firebase를 추가합니다 .

  2. 모듈(앱 수준) Gradle 파일 (일반적으로 <project>/<app-module>/build.gradle )에서 Firebase 인증 Android 라이브러리에 대한 종속성을 추가합니다. Firebase Android BoM 을 사용하여 라이브러리 버전 관리를 제어하는 ​​것이 좋습니다.

    또한 Firebase 인증 설정의 일부로 앱에 Google Play 서비스 SDK를 추가해야 합니다.

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.2.0')
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.1'
    }

    Firebase Android BoM 을 사용하면 앱에서 항상 호환되는 버전의 Firebase Android 라이브러리를 사용합니다.

    (대안) BoM을 사용 하지 않고 Firebase 라이브러리 종속성 추가

    Firebase BoM을 사용하지 않기로 선택한 경우 종속성 줄에 각 Firebase 라이브러리 버전을 지정해야 합니다.

    앱에서 여러 Firebase 라이브러리를 사용하는 경우 BoM을 사용하여 모든 버전이 호환되도록 라이브러리 버전을 관리하는 것이 좋습니다.

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx:21.1.0'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.1'
    }

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.2.0')
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.1'
    }

    Firebase Android BoM 을 사용하면 앱에서 항상 호환되는 버전의 Firebase Android 라이브러리를 사용합니다.

    (대안) BoM을 사용 하지 않고 Firebase 라이브러리 종속성 추가

    Firebase BoM을 사용하지 않기로 선택한 경우 종속성 줄에 각 Firebase 라이브러리 버전을 지정해야 합니다.

    앱에서 여러 Firebase 라이브러리를 사용하는 경우 BoM을 사용하여 모든 버전이 호환되도록 라이브러리 버전을 관리하는 것이 좋습니다.

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth:21.1.0'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.1'
    }

Firebase 프로젝트 설정

  1. Firebase 콘솔의 설정 페이지에서 게임의 SHA-1 지문을 설정하세요.

    signingReport 명령:

    ./gradlew signingReport
    를 사용하여 서명 인증서의 SHA 해시를 가져올 수 있습니다.

  2. Google Play 게임즈를 로그인 공급자로 활성화:

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

      이러한 값을 찾으려면 다음을 수행하십시오.

      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 스토어에 게임을 출시하기 전에 게임에 로그인할 수 있어야 하는 모든 사용자의 이메일 주소를 추가합니다.

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

먼저 Play 게임 로그인을 앱에 통합합니다. 전체 지침 은 Android 게임에 로그인을 참조하세요.

통합에서 GoogleSignInOptions 개체를 빌드할 때 DEFAULT_GAMES_SIGN_IN 구성을 사용하고 requestServerAuthCode 를 호출합니다.

Kotlin+KTX

val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestServerAuthCode(getString(R.string.default_web_client_id))
        .build()

Java

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestServerAuthCode(getString(R.string.default_web_client_id))
        .build();

웹 서버 클라이언트 ID를 requestServerAuthCode 메소드에 전달해야 합니다. Firebase Console에서 Play 게임 로그인을 사용 설정할 때 제공한 ID입니다.

Firebase로 인증

앱에 Play 게임 로그인을 추가한 후에는 플레이어가 Play 게임에 성공적으로 로그인할 때 받는 Google 계정 사용자 인증 정보를 사용하도록 Firebase를 설정해야 합니다.

  1. 먼저 로그인 활동의 onCreate 메소드에서 FirebaseAuth 객체의 공유 인스턴스를 가져옵니다.

Kotlin+KTX

private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.auth

Java

private FirebaseAuth mAuth;
// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();
  1. 활동을 초기화할 때 플레이어가 이미 Firebase에 로그인되어 있는지 확인하세요.

Kotlin+KTX

override fun onStart() {
    super.onStart()
    // Check if user is signed in (non-null) and update UI accordingly.
    val currentUser = auth.currentUser
    updateUI(currentUser)
}

Java

@Override
public void onStart() {
    super.onStart();
    // Check if user is signed in (non-null) and update UI accordingly.
    FirebaseUser currentUser = mAuth.getCurrentUser();
    updateUI(currentUser);
}
If the player isn't signed in, present the player with your game's
signed-out experience, including the option to sign in.
  1. 플레이어가 자동으로 또는 대화형으로 Play 게임에 로그인한 후 GoogleSignInAccount 개체에서 인증 코드를 가져와 Firebase 자격 증명으로 교환하고 Firebase 자격 증명을 사용하여 Firebase에 인증합니다.

Kotlin+KTX

// Call this both in the silent sign-in task's OnCompleteListener and in the
// Activity's onActivityResult handler.
private fun firebaseAuthWithPlayGames(acct: GoogleSignInAccount) {
    Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.id!!)

    val auth = Firebase.auth
    val credential = PlayGamesAuthProvider.getCredential(acct.serverAuthCode!!)
    auth.signInWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInWithCredential:success")
                    val user = auth.currentUser
                    updateUI(user)
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "signInWithCredential:failure", task.exception)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }

                // ...
            }
}

Java

// Call this both in the silent sign-in task's OnCompleteListener and in the
// Activity's onActivityResult handler.
private void firebaseAuthWithPlayGames(GoogleSignInAccount acct) {
    Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.getId());

    final FirebaseAuth auth = FirebaseAuth.getInstance();
    AuthCredential credential = PlayGamesAuthProvider.getCredential(acct.getServerAuthCode());
    auth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success");
                        FirebaseUser user = auth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        Toast.makeText(MainActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }

                    // ...
                }
            });
}

signInWithCredential 에 대한 호출이 성공하면 getCurrentUser 메서드를 사용하여 사용자의 계정 데이터를 가져올 수 있습니다.

다음 단계

사용자가 처음으로 로그인하면 새 사용자 계정이 생성되고 Play 게임 ID에 연결됩니다. 이 새 계정은 Firebase 프로젝트의 일부로 저장되며 프로젝트의 모든 앱에서 사용자를 식별하는 데 사용할 수 있습니다.

게임에서 FirebaseUser 개체에서 사용자의 Firebase UID를 가져올 수 있습니다.

Kotlin+KTX

val user = auth.currentUser
user?.let {
    val playerName = it.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 FirebaseUser.getIdToken() instead.
    val uid = it.uid
}

Java

FirebaseUser user = mAuth.getCurrentUser();
String playerName = user.getDisplayName();

// 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 FirebaseUser.getIdToken() instead.
String uid = user.getUid();

Firebase 실시간 데이터베이스 및 Cloud Storage 보안 규칙에서 auth 변수에서 로그인한 사용자의 고유한 사용자 ID를 가져와 사용자가 액세스할 수 있는 데이터를 제어하는 ​​데 사용할 수 있습니다.

사용자의 Play 게임 플레이어 정보를 가져오거나 Play 게임 서비스에 액세스하려면 Google Play 게임 SDK 에서 제공하는 API를 사용하세요.

사용자를 로그아웃하려면 FirebaseAuth.signOut() 을 호출합니다.

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();