Ir a la consola

Autentica en Unity con los Servicios de juego de Google Play

Puedes usar los servicios de juego de Google Play para incorporar jugadores en un juego de Android creado a partir de Firebase y Unity. Para usar el acceso de los servicios de juego de Google Play con Firebase, el jugador debe acceder a Google Play Juegos y en ese momento debes solicitar un código de autorización OAuth 2.0. Después, pasa el código de Auth a PlayGamesAuthProvider para generar una credencial de Firebase que podrás usar para autenticar con la plataforma.

Antes de comenzar

Configura Unity

  1. Agrega el SDK de Unity y Firebase a tu proyecto de Unity como se describe en la sección Configuración para Android de la guía Cómo agregar Firebase a tu proyecto de Unity.

    Asegúrate de importar FirebaseAuth.unitypackage.

  2. En Unity Editor, ve a Build Settings > Player Settings > Other Settings y configura el nombre del paquete de Android de tu juego.

  3. Luego, ve a Build Settings > Player Settings > Publishing Settings y selecciona o crea un almacenamiento de claves y una clave, que se usará para firmar tu paquete de Android. A fin de que esta opción funcione, tu APK debe estar registrado para acceder mediante Play Juegos. Este requisito no solo se aplica a las publicaciones, sino también al desarrollo del juego.

Configura tu proyecto de Firebase

  1. Agrega tu juego a un proyecto de Firebase desde Firebase console, con el nombre de paquete que configuraste en Unity.

  2. Configura la huella digital SHA-1 de tu juego desde la página Configuración de Firebase console, con la clave que configuraste en Unity.

    Puedes obtener la huella digital SHA-1 de tu clave con el comando keytool:

    keytool -exportcert -list -v \
        -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE
    El APK debe estar registrado con esta clave, incluso durante el desarrollo.

  3. Habilita Google Play Juegos como proveedor de acceso:

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

      Sigue estos pasos para encontrar esos valores:

      1. Abre el proyecto de Firebase en la página de credenciales de la Consola de API de Google.
      2. En la sección ID de cliente OAuth 2.0, abre la página de detalles Cliente web (creado automáticamente por el servicio de Google). Esta página muestra el ID y el secreto de cliente del servidor web.
    2. Luego, en Firebase console, abre la sección Authentication.

    3. En la pestaña Método de acceso, habilita el proveedor de acceso Play Juegos. Deberás especificar el secreto de cliente y el ID de cliente del servidor web del proyecto, que obtuviste de la Consola de API.

  1. Abre Google Play Console y haz clic en Servicios de juego.

  2. Haz clic en Agregar juego nuevo. En el diálogo de juego nuevo, haz clic en Ya utilizo las API de Google en mi juego y haz clic en el nombre de tu proyecto de Firebase en la lista. Selecciona una categoría de juego y haz clic en Continuar para ir a la página de detalles del juego.

  3. Asegúrate de que todas las API necesarias estén habilitadas al final de la página de detalles del juego.

  4. Luego, abre la página Apps vinculadas y haz clic en Android. Especifica el nombre del paquete de tu juego y haz clic en Guardar y continuar. La consola mostrará tu ID de cliente de Android. Puedes ignorar este valor.

  5. Vuelve a abrir la página Apps vinculadas y haz clic en Vincular otra app > Web. Usarás esta página para permitir que Firebase Auth recupere tokens de autenticación desde Google Play.

    En el campo URL de inicio, especifica una URL que controles, como una que use tu dominio firebaseapp.com: https://myfirebaseproject-1ac49.firebaseapp.com/. No es necesario que esta URL sea válida, pero debes especificar un valor distinto de localhost.

    En la página siguiente, haz clic en Mostrar aplicaciones y seleccionar y elige el ID de cliente de tu servidor web. Este tendrá un URI de redireccionamiento similar a https://myfirebaseproject-1ac49.firebaseapp.com/__/auth/handler.

  6. En las páginas Eventos, Logros y Tablas de clasificación, crea cualquier recurso de Play Juegos que quieras usar con tu juego. Si no quieres usar ninguno de inmediato, puedes crear una entrada de marcador de posición. Luego, haz clic en Obtener recursos en las páginas Eventos, Logros o Tablas de clasificación y copia el fragmento de los recursos de Android en el lugar que prefieras. Necesitarás este fragmento para configurar el complemento de los Servicios de juego de Google Play.

    El fragmento de recursos luce como el 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 Pruebas, incluye en la lista blanca las direcciones de correo electrónico de los usuarios que deben poder acceder a tu juego antes de su lanzamiento en Play Store.

Integra el acceso a Play Juegos en tu juego

  1. Descarga la actualización más reciente del complemento de Play Juegos para Unity y extráelo.

  2. Importa el paquete de Unity más reciente del complemento a tu proyecto de Unity. Para encontrar el paquete, consulta el directorio current-build del archivo de la actualización.

  3. Configura el complemento de Play Juegos:

    1. Haz clic en Ventana > Google Play Juegos > Configuración > Configuración de Android para abrir la pantalla Configuración de Android.
    2. Pega el fragmento de recursos de Android que obtuviste de Play Console en el campo Definición de recursos.
    3. Pega el ID de cliente del servidor web (que proporcionaste cuando habilitaste el acceso de Play Juegos en Firebase console) en el campo ID de cliente.
    4. Haz clic en Configuración.
  4. En tu juego, configura un cliente de Play Juegos 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 elija acceder con Play Juegos, llama a Social.localUser.Authenticate():

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

Autentica con Firebase

Después de que integres el acceso a tu juego con Play Juegos, puedes usar el código de Auth de los servicios de Play Juegos para realizar la autenticación en Firebase.

  1. Después de que el jugador acceda correctamente mediante Play Juegos, en el controlador de continuación de acceso, obtén un código de Auth para la cuenta del jugador:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. Luego, intercambia el código de Auth desde los servicios de Play Juegos para obtener una credencial de Firebase. Luego, usa esa credencial para autenticar al jugador de la siguiente manera:

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

Próximos pasos

Cuando un usuario accede por primera vez, se crea una nueva cuenta de usuario y se vincula con su ID de Play Juegos. Esta cuenta nueva se almacena como parte de tu proyecto de Firebase y se puede usar para identificar a un usuario en todas las apps de tu 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) {
  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 de Cloud Storage, puedes obtener el ID único del usuario que accedió a partir de la variable auth y usarlo para controlar los datos a los que tiene acceso.

Para obtener la información de jugador de un usuario de Play Juegos o acceder a los servicios de Play Juegos, usa las API que proporcionó el complemento de Play Juegos.

Para salir de la sesión de un usuario, llama a SignOut() de la siguiente manera:

auth.SignOut();