Puedes utilizar los servicios de Google Play Games para iniciar sesión en un juego de Android creado en Firebase. Para utilizar los servicios de Google Play Games, inicie sesión con Firebase, primero inicie sesión en el jugador con Google Play Games y solicite un código de autenticación OAuth 2.0 cuando lo haga. Luego, pase el código de autenticación a PlayGamesAuthProvider
para generar una credencial de Firebase, que puede usar para autenticarse con Firebase.
Antes de que empieces
Configura tu proyecto de Android
Si aún no lo has hecho, agrega Firebase a tu proyecto de Android .
En el archivo Gradle de su módulo (nivel de aplicación) (generalmente
<project>/<app-module>/build.gradle.kts
o<project>/<app-module>/build.gradle
), agregue la dependencia para la autenticación de Firebase. biblioteca para Android. Recomendamos utilizar Firebase Android BoM para controlar el control de versiones de la biblioteca.Además, como parte de la configuración de la autenticación de Firebase, debes agregar el SDK de servicios de Google Play a tu aplicación.
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") }Al usar Firebase Android BoM , su aplicación siempre usará versiones compatibles de las bibliotecas de Firebase Android.
¿Busca un módulo de biblioteca específico de Kotlin? A partir de octubre de 2023 (Firebase BoM 32.5.0) , tanto los desarrolladores de Kotlin como los de Java podrán depender del módulo de biblioteca principal (para más detalles, consulte las preguntas frecuentes sobre esta iniciativa ).(Alternativa) Agregue dependencias de la biblioteca de Firebase sin usar la BoM
Si elige no utilizar la BoM de Firebase, debe especificar cada versión de la biblioteca de Firebase en su línea de dependencia.
Tenga en cuenta que si usa varias bibliotecas de Firebase en su aplicación, le recomendamos encarecidamente usar la BoM para administrar las versiones de la biblioteca, lo que garantiza que todas las versiones sean compatibles.
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") }
Configura tu proyecto de Firebase
Configure la huella digital SHA-1 de su juego desde la página Configuración de Firebase console.
Puede obtener el hash SHA de su certificado de firma con el comando Gradle
signingReport
:./gradlew signingReport
Habilite Google Play Games como proveedor de inicio de sesión:
Encuentre el ID de cliente del servidor web y el secreto de cliente de su proyecto. El ID del cliente del servidor web identifica su proyecto de Firebase ante los servidores de autenticación de Google Play.
Para encontrar estos valores:
- Abra su proyecto de Firebase en la página de credenciales de la consola de las API de Google .
- En la sección ID de cliente de OAuth 2.0 , abra la página de detalles del cliente web (creado automáticamente por el servicio de Google) . Esta página enumera el ID y el secreto del cliente de su servidor web.
Luego, en Firebase console , abre la sección Autenticación .
En la pestaña Método de inicio de sesión , habilite el proveedor de inicio de sesión de Play Games . Deberá especificar el ID de cliente del servidor web y el secreto de cliente de su proyecto, que obtuvo de la consola de API.
Configura los servicios de Play Games con la información de tu aplicación Firebase
En Google Play Console , abre tu aplicación Google Play o crea una.
En la sección Crecer , haz clic en Servicios de Play Games > Configuración y administración > Configuración .
Haz clic en Sí, mi juego ya usa las API de Google , selecciona tu proyecto de Firebase de la lista y luego haz clic en Usar .
En la página de configuración de servicios de Play Games, haga clic en Agregar credencial .
- Seleccione el tipo de servidor de juegos .
- En el campo Cliente OAuth , seleccione el ID del cliente web de su proyecto. Asegúrate de que sea el mismo ID de cliente que especificaste cuando habilitaste el inicio de sesión en Play Games.
- Guarde sus cambios.
Aún en la página de configuración de servicios de Play Games, haga clic en Agregar credencial nuevamente.
- Seleccione el tipo de Android .
- En el campo Cliente OAuth , seleccione el ID del cliente Android de su proyecto. (Si no ves tu ID de cliente de Android, asegúrate de configurar la huella digital SHA-1 de tu juego en la consola Firebase).
- Guarde sus cambios.
En la página Probadores , agrega las direcciones de correo electrónico de cualquier usuario que necesite poder iniciar sesión en tu juego antes de lanzarlo en Play Store.
Integra el inicio de sesión de Play Games en tu juego
Primero, integra el inicio de sesión de Play Games en tu aplicación. Consulta Iniciar sesión en juegos de Android para obtener instrucciones completas.
En su integración, cuando cree el objeto GoogleSignInOptions
, use la configuración DEFAULT_GAMES_SIGN_IN
y llame 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();
Debe pasar el ID de cliente de su servidor web al método requestServerAuthCode
. Esta es la identificación que proporcionaste cuando habilitaste el inicio de sesión de Play Games en Firebase console.
Autenticar con Firebase
Después de agregar el inicio de sesión de Play Games a tu aplicación, debes configurar Firebase para usar las credenciales de la cuenta de Google que obtienes cuando un jugador inicia sesión correctamente con Play Games.
- Primero, en el método
onCreate
de tu actividad de inicio de sesión, obtén la instancia compartida del objetoFirebaseAuth
:
Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Al inicializar su Actividad, verifique si el jugador ya inició sesión con 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.
- Después de que un jugador inicie sesión en Play Games, ya sea de forma silenciosa o interactiva, obtenga el código de autenticación del objeto
GoogleSignInAccount
, cámbielo por una credencial de Firebase y autentíquese con Firebase usando la credencial de 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); } // ... } }); }
Si la llamada a signInWithCredential
tiene éxito, puede utilizar el método getCurrentUser
para obtener los datos de la cuenta del usuario.
Próximos pasos
Después de que un usuario inicia sesión por primera vez, se crea una nueva cuenta de usuario y se vincula a su ID de Play Games. Esta nueva cuenta se almacena como parte de su proyecto de Firebase y se puede usar para identificar a un usuario en cada aplicación de su proyecto.
En tu juego, puedes obtener el UID de Firebase del usuario desde el 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();
En las reglas de seguridad de Firebase Realtime Database y Cloud Storage, puede obtener el ID de usuario único del usuario que inició sesión a partir de la variable auth
y usarlo para controlar a qué datos puede acceder un usuario.
Para obtener la información del jugador de Play Games de un usuario o acceder a los servicios de Play Games, utilice las API proporcionadas por el SDK de Google Play Games .
Para cerrar la sesión de un usuario, llame a FirebaseAuth.signOut()
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();