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

Autenticarse usando los servicios de juegos de Google Play en Android

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Puede usar los servicios de Google Play Games para que los jugadores inicien sesión en un juego de Android basado en Firebase. Para usar el inicio de sesión de los servicios de Google Play Juegos con Firebase, primero inicie sesión con el jugador en Google Play Juegos 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

  1. Si aún no lo ha hecho, agregue Firebase a su proyecto de Android .

  2. En el archivo Gradle de tu módulo (nivel de aplicación) (generalmente <project>/<app-module>/build.gradle ), agrega la dependencia para la biblioteca de Android Firebase Authentication. Recomendamos usar Firebase Android BoM para controlar el control de versiones de la biblioteca.

    Además, como parte de la configuración de Firebase Authentication, debe agregar el SDK de servicios de Google Play a su aplicación.

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

    Al usar Firebase Android BoM , su aplicación siempre usará versiones compatibles de las bibliotecas de Firebase Android.

    (Alternativa) Agregar dependencias de la biblioteca de Firebase sin usar el BoM

    Si elige no usar Firebase BoM, 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 enfáticamente que use la lista de materiales 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: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'
    }

    Al usar Firebase Android BoM , su aplicación siempre usará versiones compatibles de las bibliotecas de Firebase Android.

    (Alternativa) Agregar dependencias de la biblioteca de Firebase sin usar el BoM

    Si elige no usar Firebase BoM, 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 enfáticamente que use la lista de materiales 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-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'
    }

Configura tu proyecto de Firebase

  1. Establezca la huella digital SHA-1 de su juego desde la página Configuración de la consola Firebase.

    Puede obtener el hash SHA de su certificado de firma con el comando Gradle signingReport :

    ./gradlew signingReport

  2. Habilite Google Play Juegos como proveedor de inicio de sesión:

    1. Encuentre el ID de cliente del servidor web y el secreto del cliente de su proyecto. El ID de cliente del servidor web identifica su proyecto de Firebase en los servidores de autenticación de Google Play.

      Para encontrar estos valores:

      1. Abra su proyecto de Firebase en la página de credenciales de la consola de API de Google .
      2. En la sección ID de cliente de OAuth 2.0 , abra la página de detalles del cliente web (creado automáticamente por Google Service) . Esta página enumera su ID de cliente de servidor web y su secreto.
    2. Luego, en Firebase console , abra la sección Autenticación .

    3. 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 del cliente de su proyecto, que obtuvo de la consola de API.

Configura los servicios de Play Juegos con la información de tu aplicación de Firebase

  1. En Google Play Console , abra su aplicación Google Play o cree una.

  2. En la sección Crecer , haga clic en Servicios de juegos de Play > Configuración y administración > Configuración .

  3. Haga clic en Sí, mi juego ya usa las API de Google , seleccione su proyecto de Firebase de la lista y luego haga clic en Usar .

  4. En la página de configuración de los servicios de Play Juegos, haga clic en Agregar credencial .

    1. Seleccione el tipo de servidor de juegos .
    2. En el campo Cliente de OAuth , seleccione el ID de cliente web de su proyecto. Asegúrese de que sea el mismo ID de cliente que especificó cuando activó el inicio de sesión de Play Juegos.
    3. Guarde sus cambios.
  5. Todavía en la página de configuración de los servicios de Play Juegos, haga clic en Agregar credencial nuevamente.

    1. Seleccione el tipo de Android .
    2. En el campo Cliente de OAuth , seleccione el ID de cliente de Android de su proyecto. (Si no ve su ID de cliente de Android, asegúrese de configurar la huella digital SHA-1 de su juego en la consola de Firebase).
    3. Guarde sus cambios.
  6. En la página Testers , agregue las direcciones de correo electrónico de cualquier usuario que necesite poder iniciar sesión en su juego antes de lanzarlo en Play Store.

Integre el inicio de sesión de Play Juegos en su juego

Primero, integre el inicio de sesión de Play Juegos en su aplicación. Consulte 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 a 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()

Debe pasar su ID de cliente del servidor web al método requestServerAuthCode . Este es el ID que proporcionaste cuando habilitaste el inicio de sesión de Play Juegos en Firebase console.

Autenticar con Firebase

Después de agregar el inicio de sesión de Play Juegos a su aplicación, debe configurar Firebase para usar las credenciales de la cuenta de Google que obtiene cuando un jugador inicia sesión correctamente con Play Juegos.

  1. Primero, en el método onCreate de tu actividad de inicio de sesión, obtén la instancia compartida del 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. Al inicializar su actividad, verifique si el jugador ya inició sesión con 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. Después de que un jugador inicie sesión con Play Juegos 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:

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

                // ...
            }
}

Si la llamada a signInWithCredential tiene éxito, puede usar 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 Juegos. 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 su juego, puede obtener el UID de Firebase del usuario del 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
}

En sus Reglas de seguridad de Firebase Realtime Database y Cloud Storage, puede obtener la ID de usuario única del usuario que inició sesión de la variable de auth y usarla para controlar a qué datos puede acceder un usuario.

Para obtener la información de jugador de Play Juegos de un usuario o para acceder a los servicios de Play Juegos, use las API proporcionadas por el SDK de Google Play Juegos .

Para cerrar la sesión de un usuario, llama a FirebaseAuth.signOut() :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()