Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Autenticar usando os serviços de jogos do Google Play no Android

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Você pode usar os serviços do Google Play Games para fazer login de jogadores em um jogo Android criado no Firebase. Para usar o login dos serviços do Google Play Games com o Firebase, primeiro faça login do jogador no Google Play Games e solicite um código de autenticação OAuth 2.0 ao fazer isso. Em seguida, passe o código de autenticação para PlayGamesAuthProvider para gerar uma credencial do Firebase, que você pode usar para autenticar com o Firebase.

Antes de você começar

Configure seu projeto Android

  1. Se ainda não o fez, adicione o Firebase ao seu projeto Android .

  2. No arquivo Gradle do módulo (nível do aplicativo) (geralmente <project>/<app-module>/build.gradle ), adicione a dependência da biblioteca Android do Firebase Authentication. Recomendamos usar o Firebase Android BoM para controlar o controle de versão da biblioteca.

    Além disso, como parte da configuração do Firebase Authentication, você precisa adicionar o SDK do Google Play Services ao seu aplicativo.

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.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.0'
    }

    Ao usar o Firebase Android BoM , seu aplicativo sempre usará versões compatíveis das bibliotecas do Firebase Android.

    (Alternativa) Adicionar dependências da biblioteca do Firebase sem usar o BoM

    Se você optar por não usar o Firebase BoM, deverá especificar cada versão da biblioteca do Firebase em sua linha de dependência.

    Observe que, se você usa várias bibliotecas do Firebase em seu aplicativo, é altamente recomendável usar o BoM para gerenciar as versões da biblioteca, o que garante que todas as versões sejam compatíveis.

    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.0'
    }

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.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.0'
    }

    Ao usar o Firebase Android BoM , seu aplicativo sempre usará versões compatíveis das bibliotecas do Firebase Android.

    (Alternativa) Adicionar dependências da biblioteca do Firebase sem usar o BoM

    Se você optar por não usar o Firebase BoM, deverá especificar cada versão da biblioteca do Firebase em sua linha de dependência.

    Observe que, se você usa várias bibliotecas do Firebase em seu aplicativo, é altamente recomendável usar o BoM para gerenciar as versões da biblioteca, o que garante que todas as versões sejam compatíveis.

    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.0'
    }

Configurar seu projeto do Firebase

  1. Defina a impressão digital SHA-1 do seu jogo na página Configurações do console Firebase.

    Você pode obter o hash SHA do seu certificado de assinatura com o comando signingReport :

    ./gradlew signingReport

  2. Ative o Google Play Games como provedor de login:

    1. Encontre o ID do cliente do servidor da Web e o segredo do cliente do seu projeto. O ID do cliente do servidor da Web identifica seu projeto do Firebase para os servidores de autenticação do Google Play.

      Para encontrar esses valores:

      1. Abra seu projeto do Firebase na página de credenciais do console de APIs do Google .
      2. Na seção IDs do cliente OAuth 2.0 , abra a página de detalhes do cliente Web (criado automaticamente pelo serviço do Google) . Esta página lista o ID e o segredo do cliente do seu servidor web.
    2. Em seguida, no console do Firebase , abra a seção Autenticação .

    3. Na guia Método de login , ative o provedor de login do Play Games . Você precisará especificar o ID do cliente do servidor da Web e o segredo do cliente do seu projeto, obtidos no console de APIs.

Configure os serviços do Play Games com as informações do seu app Firebase

  1. No Google Play Console , abra seu aplicativo Google Play ou crie um.

  2. Na seção Crescer , clique em Serviços do Play Games > Configuração e gerenciamento > Configuração .

  3. Clique em Sim, meu jogo já usa APIs do Google , selecione seu projeto do Firebase na lista e clique em Usar .

  4. Na página de configuração dos serviços do Play Games, clique em Adicionar credencial .

    1. Selecione o tipo de servidor de jogo .
    2. No campo cliente OAuth , selecione o ID do cliente web do seu projeto. Certifique-se de que este seja o mesmo ID de cliente que você especificou quando ativou o login do Play Games.
    3. Salve suas alterações.
  5. Ainda na página de configuração dos serviços do Play Games, clique novamente em Adicionar credencial .

    1. Selecione o tipo de Android .
    2. No campo cliente OAuth , selecione o ID do cliente Android do seu projeto. (Se você não vir seu ID de cliente Android, certifique-se de definir a impressão digital SHA-1 do seu jogo no console do Firebase.)
    3. Salve suas alterações.
  6. Na página Testadores , adicione os endereços de e-mail de todos os usuários que precisam fazer login no seu jogo antes de lançá-lo na Play Store.

Integre o login do Play Games ao seu jogo

Primeiro, integre o login do Play Games ao seu aplicativo. Consulte Iniciar sessão nos Jogos Android para obter instruções completas.

Na sua integração, ao construir o objeto GoogleSignInOptions , use a configuração DEFAULT_GAMES_SIGN_IN e chame requestServerAuthCode :

Java

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

Kotlin+KTX

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

Você deve passar o ID do cliente do servidor web para o método requestServerAuthCode . Este é o ID que você forneceu quando ativou o login do Play Games no Firebase console.

Autenticar com o Firebase

Depois de adicionar o login do Play Games ao seu aplicativo, você precisa configurar o Firebase para usar as credenciais da Conta do Google que você obtém quando um jogador faz login com sucesso no Play Games.

  1. Primeiro, no método onCreate da sua atividade de login, obtenha a instância compartilhada do objeto FirebaseAuth :

Java

private FirebaseAuth mAuth;
// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();

Kotlin+KTX

private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.auth
  1. Ao inicializar sua atividade, verifique se o player já está conectado ao Firebase:

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);
}

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)
}
If the player isn't signed in, present the player with your game's
signed-out experience, including the option to sign in.
  1. Depois que um jogador fizer login no Play Games de forma silenciosa ou interativa, obtenha o código de autenticação do objeto GoogleSignInAccount , troque-o por uma credencial do Firebase e autentique-se com o Firebase usando a credencial do Firebase:

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);
                    }

                    // ...
                }
            });
}

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)
                }

                // ...
            }
}

Se a chamada para signInWithCredential for bem-sucedida, você poderá usar o método getCurrentUser para obter os dados da conta do usuário.

Próximos passos

Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada à ID do Play Games. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em todos os aplicativos do seu projeto.

No seu jogo, você pode obter o UID do FirebaseUser do usuário no objeto FirebaseUser:

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();

Kotlin+KTX

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

Nas regras de segurança do Firebase Realtime Database e do Cloud Storage, você pode obter o ID de usuário exclusivo do usuário conectado na variável de auth e usá-lo para controlar quais dados um usuário pode acessar.

Para obter as informações do jogador do Play Games de um usuário ou acessar os serviços do Play Games, use as APIs fornecidas pelo SDK do Google Play Games .

Para desconectar um usuário, chame FirebaseAuth.signOut() :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()