Autenticarse en Unity utilizando los servicios de juegos de Google Play

Puedes utilizar los servicios de Google Play Games para registrar jugadores en un juego de Android creado en Firebase y Unity. Para utilizar los servicios de Google Play Games, inicie sesión con Firebase, primero inicie sesión en el reproductor 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 Unity

  1. Agregue el archivo de configuración de Firebase y el SDK de Firebase Unity a su proyecto de Unity como se describe en Agregar Firebase a su proyecto de Unity . Siga las instrucciones para Android.

    Asegúrese de importar FirebaseAuth.unitypackage .

  2. En el Editor de Unity, en Configuración de compilación > Configuración del jugador > Otras configuraciones, configure el nombre del paquete de Android de su juego.

  3. Luego, en Configuración de compilación > Configuración del reproductor > Configuración de publicación , seleccione o cree un almacén de claves y una clave, que se utilizarán para firmar su paquete de Android. Tu APK debe estar firmado para que funcione el inicio de sesión en Play Games; este requisito se aplica no solo para la publicación, sino también durante el desarrollo de tu juego.

Configura tu proyecto de Firebase

  1. En Firebase console , vaya al proyecto de Firebase en el que registró su proyecto de Unity.

  2. Configure la huella digital SHA-1 de su juego desde la página Configuración de la consola Firebase, usando la clave que configuró en Unity.

    Puede obtener la huella digital SHA-1 de su clave con el comando keytool :

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

    Alternativamente, puede obtener el hash SHA de su certificado de firma con el comando Gradle signingReport :

    gradlew signingReport

    Su APK debe estar firmado con esta clave, incluso durante el desarrollo.

  3. Habilite Google Play Games como proveedor de inicio de sesión:

    1. En Firebase console, abre la sección Autenticación .

    2. Genere y obtenga el ID de cliente del servidor web y el secreto de cliente de su proyecto:

      1. Dentro de la pestaña Método de inicio de sesión , habilite el proveedor de inicio de sesión de Google .

      2. Copie el ID del cliente del servidor web y el secreto del proveedor de inicio de sesión de Google .

    3. En la pestaña Método de inicio de sesión , habilite el proveedor de inicio de sesión de Play Games y especifique el ID de cliente del servidor web y el secreto de cliente de su proyecto, que obtuvo en el último paso.

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

  1. En Google Play Console , abre tu aplicación Google Play o crea una.

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

  3. 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 .

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

    1. Seleccione el tipo de servidor de juegos .
    2. 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.
    3. Guarde sus cambios.
  5. Aún en la página de configuración de servicios de Play Games, haga clic en Agregar credencial nuevamente.

    1. Seleccione el tipo de Android .
    2. 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).
    3. Guarde sus cambios.
  6. En las páginas Eventos , Logros y Tablas de clasificación , crea cualquier recurso de Play Games que quieras usar con tu juego (si no quieres usar ninguno inmediatamente, puedes crear una entrada de marcador de posición). Luego, en cualquiera de las páginas Eventos , Logros o Tablas de clasificación , haga clic en Obtener recursos y copie el fragmento de recursos de Android en algún lugar conveniente. Necesitará el fragmento para configurar el complemento de servicios de Google Play Games.

    El fragmento de recursos se parece al siguiente ejemplo:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    Google Play game services IDs.
    Save this file as res/values/games-ids.xml in your project.
    -->
    <resources>
      <!-- app_id -->
      <string name="app_id" translatable="false">123456789000</string>
      <!-- package_name -->
      <string name="package_name" translatable="false">com.example.game</string>
      <!-- event Wiped Raid -->
      <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string>
    </resources>
    
  7. 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

  1. Descargue la última versión del complemento Play Games para Unity y extráigalo.

  2. Importe el paquete Unity del complemento a su proyecto Unity. Puede encontrar el paquete de Unity en el directorio current-build del archivo de lanzamiento.

  3. Configura el complemento Play Juegos:

    1. Haga clic en Ventana > Google Play Games > Configuración > Configuración de Android para abrir la pantalla de Configuración de Android .
    2. Pegue el fragmento de recursos de Android que obtuvo de la consola Play en el campo Definición de recursos .
    3. Pega el ID de cliente de tu servidor web, que proporcionaste cuando habilitaste el inicio de sesión de Play Games en Firebase console, en el campo ID de cliente .
    4. Haga clic en Configuración .
  4. En tu juego, configura un cliente de Play Games con la configuración RequestServerAuthCode habilitada:

    using GooglePlayGames;
    using GooglePlayGames.BasicApi;
    using UnityEngine.SocialPlatforms;
    using System.Threading.Tasks;
    
    PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
        .RequestServerAuthCode(false /* Don't force refresh */)
        .Build();
    
    PlayGamesPlatform.InitializeInstance(config);
    PlayGamesPlatform.Activate();
    
  5. Luego, cuando un jugador elige iniciar sesión en Play Games, llama Social.localUser.Authenticate() :

    Social.localUser.Authenticate((bool success) => {
      // handle success or failure
    });
    

Autenticar con Firebase

Después de agregar el inicio de sesión de Play Games a tu juego, puedes usar el código de autenticación de los servicios de Play Games para autenticarte con Firebase.

  1. Después de que el jugador haya iniciado sesión exitosamente usando Play Games, en el controlador de continuación de inicio de sesión, obtenga un código de autenticación para la cuenta del jugador:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. Luego, intercambia el código de autenticación de los servicios de Play Games por una credencial de Firebase y usa la credencial de Firebase para autenticar al jugador:

    Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
    Firebase.Auth.Credential credential =
        Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
    

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 Firebase.Auth.FirebaseUser :

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
  string 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 User.TokenAsync() instead.
  string uid = user.UserId;
}

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 complemento de Play Games.

Para cerrar la sesión de un usuario, llame a SignOut() :

auth.SignOut();