Ir para o console

Autenticar usando os serviços relacionados a jogos do Google Play no Android

Você pode usar os serviços relacionados a jogos do Google Play para fazer login de usuários em um jogo para Android criado no Firebase. Para usar esse tipo de login com o Firebase, primeiro inicie a sessão do jogador no Google Play Games e solicite um código de autenticação OAuth 2.0. Em seguida, transmita o código de autenticação ao PlayGamesAuthProvider para gerar uma credencial do Firebase. Você pode usá-la para fazer autenticações com o Firebase.

Antes de começar

Configurar seu projeto do Android Studio

  1. Adicione o Firebase ao projeto do Android.
  2. Adicione as dependências para o Firebase Authentication e o Google Play Services no seu arquivo build.gradle no nível do app:
    implementation 'com.google.firebase:firebase-auth:16.1.0'
    implementation 'com.google.android.gms:play-services-auth:16.0.1'
    

Configurar seu projeto do Firebase

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

    Consiga a impressão digital SHA-1 da sua chave com o comando keytool:

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

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

    1. Encontre o código do cliente do servidor da Web e a chave secreta do cliente referente ao seu projeto. O código do cliente do servidor da Web identifica seu projeto do Firebase para os servidores de autenticação do Google Play.

      Para encontrar esses valores, faça o seguinte:

      1. Abra o projeto do Firebase na página de credenciais do Console de APIs do Google.
      2. Na seção de códigos do cliente OAuth 2.0, abra a página de detalhes do cliente da Web (criada automaticamente pelo serviço do Google). Nessa página, há uma lista com a chave secreta e o código do cliente do servidor da Web.
    2. Em seguida, no Console do Firebase, abra a seção Authentication.

    3. Na guia Método de login, ative o provedor de login do Play Games. Será necessário especificar o código do cliente do servidor da Web e a chave secreta do cliente referente ao seu projeto, que você localizou no Console de APIs.

  1. Abra o Google Play Console e clique em Serviços relacionados a jogos.
  2. Clique em Adicionar um novo jogo. Nessa caixa de diálogo, clique em Já utilizo APIs do Google em meu jogo e clique no nome do seu projeto do Firebase na lista. Selecione uma categoria de jogo e clique em Continuar para acessar a página de detalhes do jogo.
  3. No final dessa página, verifique se todas as APIs necessárias estão ativadas.
  4. Em seguida, abra a página Apps vinculados e clique em Android. Especifique o nome do pacote do seu jogo e clique em Salvar e continuar. O console exibirá seu código do cliente do Android. Você pode ignorar esse valor.
  5. Na página Teste, coloque na lista de permissões os endereços de e-mail de qualquer usuário que precise fazer login no seu jogo antes de liberá-lo na Play Store.

Integrar o login com o Play Games ao seu jogo

Primeiro, integre o login com o Play Games ao app. Veja instruções completas em Fazer login em jogos para Android.

Na sua integração, quando você criar o objeto GoogleSignInOptions, use a configuração DEFAULT_GAMES_SIGN_IN e chame requestServerAuthCode:

Java
Android

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

Kotlin
Android

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

É necessário transmitir o código do cliente do seu servidor da Web para o método requestServerAuthCode. Esse é o código que você forneceu quando ativou o login com o Play Games no Console do Firebase.

Autenticar com o Firebase

Depois de adicionar o login com o Play Games ao app, é preciso configurar o Firebase para usar as credenciais da Conta do Google que você recebe quando um jogador faz o login dessa maneira.

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

Java
Android

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

Kotlin
Android

private lateinit var auth: FirebaseAuth// ...
// Initialize Firebase Auth
auth = FirebaseAuth.getInstance()
  1. Ao inicializar a atividade, verifique se o jogador já fez login com o Firebase:

Java
Android

@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
Android

public 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 com o Play Games de maneira silenciosa ou interativa, troque o código de autenticação do objeto GoogleSignInAccount por uma credencial do Firebase e use-a para fazer a autenticação:

Java
Android

// 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
Android

// 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 = FirebaseAuth.getInstance()
    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 coletar os dados da conta do usuário.

Próximas etapas

Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada ao código do Play Games. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em cada app no seu projeto.

No seu jogo, você pode receber o UID do Firebase a partir do usuário do objeto FirebaseUser:

Java
Android

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
Android

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 usar a variável auth para encontrar o código de usuário único das pessoas que fizeram login. Use essa informação para controlar quais dados os usuários podem acessar.

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

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

Java
Android

FirebaseAuth.getInstance().signOut();

Kotlin
Android

FirebaseAuth.getInstance().signOut()