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 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
Adicione o Firebase ao seu projeto Android , caso ainda não o tenha feito.
No arquivo Gradle do módulo (nível do aplicativo) (geralmente
<project>/<app-module>/build.gradle.kts
ou<project>/<app-module>/build.gradle
), adicione a dependência para o Firebase Authentication biblioteca para Android. 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.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.8.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.0.0") }Ao usar o Firebase Android BoM , seu aplicativo sempre usará versões compatíveis das bibliotecas do Firebase Android.
Procurando um módulo de biblioteca específico para Kotlin? A partir de outubro de 2023 (Firebase BoM 32.5.0) , tanto os desenvolvedores Kotlin quanto os Java podem depender do módulo da biblioteca principal (para obter detalhes, consulte o FAQ sobre esta iniciativa ).(Alternativa) Adicionar dependências da biblioteca 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 no seu aplicativo, é altamente recomendável usar a 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:22.3.1")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.0.0") }
Configure seu projeto do Firebase
Defina a impressão digital SHA-1 do seu jogo na página Configurações do console do Firebase.
Você pode obter o hash SHA do seu certificado de assinatura com o comando gradle
signingReport
:./gradlew signingReport
Ative o Google Play Games como provedor de login:
Encontre o ID do cliente do servidor web e o segredo do cliente do seu projeto. O ID do cliente do servidor Web identifica seu projeto do Firebase para os servidores de autenticação do Google Play.
Para encontrar esses valores:
- Abra seu projeto do Firebase na página de credenciais do console de APIs do Google .
- Na seção IDs de 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 servidor web.
Em seguida, no console do Firebase , abra a seção Autenticação .
Na guia Método de login , ative o provedor de login do Play Games . Você precisará especificar o ID do cliente do servidor 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 aplicativo Firebase
No Google Play Console , abra seu aplicativo Google Play ou crie um.
Na seção Crescer , clique em Serviços do Play Games > 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 dos serviços do Play Games, clique em Adicionar credencial .
- Selecione o tipo de servidor de jogo .
- No campo Cliente OAuth , selecione o ID do cliente web do seu projeto. Certifique-se de que este seja o mesmo ID de cliente especificado quando ativou o login no Play Games.
- Salve suas alterações.
Ainda na página de configuração dos serviços do Play Games, clique novamente em Adicionar credencial .
- Selecione o tipo de Android .
- No campo Cliente OAuth , selecione o ID do cliente Android do seu projeto. (Se você não vir seu ID de cliente Android, defina a impressão digital SHA-1 do jogo no console do Firebase.)
- Salve suas alterações.
Na página Testadores , adicione os endereços de e-mail de todos os usuários que precisam fazer login no 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 Faça login 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
:
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();
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 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.
- Primeiro, no método
onCreate
da sua atividade de login, obtenha a instância compartilhada do objetoFirebaseAuth
:
Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Ao inicializar sua Activity, verifique se o player já está conectado ao 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.
- 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 no Firebase usando a credencial do 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); } // ... } }); }
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 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 todos os aplicativos do seu projeto.
No seu jogo, você pode obter o UID do Firebase do usuário no objeto FirebaseUser
:
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();
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 auth
e usá-lo para controlar quais dados um usuário pode acessar.
Para obter informações de 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()
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();