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 o login de serviços relacionados a jogos do Google Play com o Firebase,
primeiro conecte o jogador com o Google Play Games e solicite um código de
autenticação no OAuth 2.0. Então, transmita esse código para PlayGamesAuthProvider
para
gerar uma credencial do Firebase, que pode ser usada na autenticação com o Firebase.
Antes de começar
Configurar seu projeto do Android
Adicione o Firebase ao projeto para Android, caso ainda não tenha feito isso.
No arquivo Gradle do módulo (nível do app) (geralmente
<project>/<app-module>/build.gradle.kts
ou<project>/<app-module>/build.gradle
), adicione a dependência da biblioteca do Firebase Authentication para Android. Recomendamos o uso do Firebase Android BoM para controlar o controle de versões da biblioteca.Além disso, como parte da configuração do Firebase Authentication, é necessário adicionar o SDK do Google Play Services ao seu app.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.7.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:21.3.0") }Com a Firebase Android BoM, seu app sempre vai usar versões compatíveis das bibliotecas do Firebase para Android.
(Alternativa) Adicionar dependências das bibliotecas do Firebase sem usar o BoM
Se você preferir não usar o Firebase BoM, especifique cada versão das bibliotecas do Firebase na linha de dependência correspondente.
Se você usa várias bibliotecas do Firebase no app, recomendamos utilizar o BoM para gerenciar as versões delas, porque isso ajuda a garantir a compatibilidade de todas as bibliotecas.
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:23.1.0")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.3.0") }
Configurar seu projeto do Firebase
Configure a impressão digital SHA-1 do seu jogo na página Configurações do Console do Firebase.
É possível retornar o hash SHA do certificado de assinatura com o comando
signingReport
do Gradle:./gradlew signingReport
Ative o Google Play Games como provedor de login:
Encontre o ID do cliente do servidor da Web e a chave secreta do cliente referente ao 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, faça o seguinte:
- Abra o projeto do Firebase na página de credenciais do Console de APIs do Google.
- Na seção de IDs 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 ID do cliente do servidor da Web.
No console do Firebase, abra a seção Autenticação.
Na guia Método de login, ative o provedor de login Play Games. Será necessário especificar o ID do cliente do servidor da Web e a chave secreta do cliente referente ao seu projeto, que você localizou no console de APIs.
Configurar o Play Games services com as informações do app Firebase
No Console do Google Play, abra o app Google Play ou crie um.
Na seção Expandir, clique em Play Games services> Configuração e Gerenciamento > Configuração.
Clique em Sim, meu jogo já usa APIs do Google, selecione seu projeto do Firebase na lista e clique em Usar.
Na página de configuração do Play Games services, clique em Adicionar credencial.
- Selecione o tipo de Servidor de jogos.
- No campo Cliente OAuth, selecione o ID do cliente da Web do seu projeto. Verifique se esse é o mesmo ID do cliente especificado quando você ativou o login do Play Games.
- Salve as alterações.
Ainda na página de configuração do Play Games services, clique em Adicionar credencial novamente.
- Selecione o tipo Android.
- No campo Cliente OAuth, selecione o ID do cliente Android do seu projeto. Caso você não veja o ID do cliente do Android, configure a impressão digital SHA-1 do jogo no Console do Firebase.
- Salve as alterações.
Na página Testadores, adicione 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 do Play Games ao seu jogo
Primeiro, integre o login do Play Games ao seu aplicativo. Consulte Fazer login no Android Games para ver as instruções completas.
Na sua integração, quando você criar o objeto GoogleSignInOptions
, use a configuração DEFAULT_GAMES_SIGN_IN
e chame requestServerAuthCode
:
Kotlin
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();
É necessário transmitir o ID do cliente do seu servidor da Web para o método requestServerAuthCode
.
Esse é o ID que você forneceu quando ativou o login com o Play Games no Console do Firebase.
Como 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.
- No método
onCreate
da atividade de login, acesse a instância compartilhada do objetoFirebaseAuth
:
Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Ao inicializar a atividade, verifique se o jogador já fez login com o Firebase:
Kotlin
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.
- 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:
Kotlin
// 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); } // ... } }); }
Se a chamada para signInWithCredential
for concluída, será possível 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 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 cada app no seu projeto.
No seu jogo, é possível obter o UID do Firebase do usuário a partir do objeto
FirebaseUser
:
Kotlin
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();
Nas regras de segurança do Firebase Realtime Database e do Cloud Storage, é possível
usar a variável auth
para acessar o ID exclusivo do usuário que fez 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 desse app, use as APIs fornecidas pelo SDK do Google Play Games.
Para desconectar um usuário, chame FirebaseAuth.signOut()
:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();