Autentica en Unity con los Servicios de juego de Google Play
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Puedes usar los Servicios de juego de Google Play para controlar el acceso de usuarios a un juego de Android compilado en Firebase y Unity. Para usar el acceso de los Servicios de juego de Google Play con Firebase, haz que el jugador acceda a Google Play Juegos y solicita un código de autorización OAuth 2.0 durante el proceso. Después, pasa este código a PlayGamesAuthProvider para generar una credencial de Firebase que podrás usar para autenticar con la plataforma.
Antes de comenzar
Configura tu proyecto de Unity
Agrega el archivo de configuración de Firebase y el SDK FirebaseUnity a tu proyecto de Unity
como se describe en
Agrega Firebase a tu proyecto de Unity.
Sigue las instrucciones para Android.
Asegúrate de importar FirebaseAuth.unitypackage.
En Unity Editor, ve a Build Settings > Player Settings > Other Settings y configura el nombre del paquete de Android de tu juego.
Luego, ve a Build Settings > Player Settings > Publishing Settings y selecciona o crea un almacén de claves y una clave, que se usarán para firmar tu paquete de Android. Tu APK debe estar firmado para que el acceso mediante Play Juegos funcione. Este requisito no solo se aplica a las publicaciones, sino también al desarrollo del juego.
Configura el proyecto de Firebase
En Firebase console, ve al proyecto de Firebase en el que registraste tu proyecto de Unity.
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:
Genera y obtén el secreto de cliente y el ID de cliente del servidor web de tu
proyecto:
En la pestaña Sign in method, habilita el proveedor de acceso de
Google.
Copia el ID y el secreto de cliente del servidor web del proveedor de acceso de
Google.
En la pestaña Método de acceso, habilita el proveedor de acceso de Play Games
y especifica el ID y el secreto de cliente del servidor web de tu proyecto, que obtuviste en el paso anterior.
Configura Play Games services con la información de tu app de Firebase
En la sección Crecimiento, haz clic en
Play Games services > Configuración y administración > Configuración.
Haz clic en Sí, mi juego ya usa las APIs de Google, selecciona tu proyecto de Firebase
de la lista y, luego, haz clic en Usar.
En la página de configuración de Play Games services, haz clic en
Agregar credencial.
Selecciona el tipo Servidor de juegos.
En el campo Cliente de OAuth, selecciona el ID de cliente web de tu proyecto. Asegúrate de que sea el mismo ID de cliente que especificaste cuando habilitaste el acceso con Play Games.
Guarda los cambios.
En la página de configuración de Play Games services, vuelve a hacer clic en
Agregar credencial.
Selecciona el tipo Android.
En el campo Cliente de OAuth, selecciona el ID de cliente de Android de tu proyecto.
Si no ves tu ID de cliente de Android, asegúrate de establecer la huella digital SHA-1 de tu juego en Firebase console.
Guarda los cambios.
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 de inmediato, puedes crear una entrada de marcador de posición. Luego,
haz clic en
Obtener recursos en cualquiera de 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 Google Play Games services.
El fragmento de recursos luce como el siguiente ejemplo:
En la página Verificadores, incluye las direcciones de correo electrónico de los usuarios que deben poder acceder a tu juego antes de su lanzamiento en Play Store.
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 versión.
Configura el complemento de Play Juegos:
Haz clic en Ventana > Google Play Juegos > Configuración > Configuración de Android para abrir la pantalla Configuración de Android.
Pega el fragmento de recursos de Android que obtuviste de Play Console en el campo Definición de recursos.
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.
Haz clic en Configuración.
En tu juego, configura un cliente de Play Juegos con la configuración RequestServerAuthCode habilitada:
usingGooglePlayGames;usingGooglePlayGames.BasicApi;usingUnityEngine.SocialPlatforms;usingSystem.Threading.Tasks;PlayGamesClientConfigurationconfig=newPlayGamesClientConfiguration.Builder().RequestServerAuthCode(false/* Don't force refresh */).Build();PlayGamesPlatform.InitializeInstance(config);PlayGamesPlatform.Activate();
Luego, cuando un jugador seleccione acceder con Play Juegos, llama a Social.localUser.Authenticate():
Social.localUser.Authenticate((boolsuccess)=>{// 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 juego de Play para realizar la autenticación en Firebase.
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:
Luego, intercambia el código de Auth desde los Servicios de juego de Play para obtener una credencial de Firebase. Luego, usa esa credencial para autenticar al jugador de la siguiente manera:
Firebase.Auth.FirebaseAuthauth=Firebase.Auth.FirebaseAuth.DefaultInstance;Firebase.Auth.Credentialcredential=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.AuthResultresult=task.Result;Debug.LogFormat("User signed in successfully: {0} ({1})",result.User.DisplayName,result.User.UserId);});
Próximos pasos
Cuando un usuario accede por primera vez, se crea una nueva cuenta de usuario que se vincula a su ID de Play Juegos. Esta cuenta nueva se almacena como parte de tu proyecto de Firebase y puede usarse para identificar a un usuario en todas las apps del proyecto.
En tu juego, puedes obtener el UID de Firebase del usuario desde el objeto Firebase.Auth.FirebaseUser:
Firebase.Auth.FirebaseUseruser=auth.CurrentUser;if(user!=null && user.IsValid()){stringplayerName=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.stringuid=user.UserId;}
En tus reglas de seguridad de Firebase Realtime Database y Cloud Storage, puedes obtener el ID del usuario único que accedió a partir de la variable auth y usarlo para controlar a qué datos podrá acceder.
Para obtener la información de jugador de un usuario de Play Juegos o acceder a los Servicios de juego de Play, usa las APIs que proporcionó el complemento de Play Juegos.
Para salir de la sesión de un usuario, llama a SignOut():
[null,null,["Última actualización: 2025-08-16 (UTC)"],[],[],null,["You can use Google Play Games services to sign in players to an Android game\nbuilt on Firebase and Unity. To use Google Play Games services sign-in with\nFirebase, first sign in the player with Google Play Games, and request an\nOAuth 2.0 auth code when you do so. Then, pass the auth code to\n`PlayGamesAuthProvider` to generate a Firebase credential, which you can use to\nauthenticate with Firebase.\n| **Important:** You can use Google Play Games services sign-in only on Android.\n\nBefore you begin\n\nSet up your Unity project\n\n1. Add the Firebase config file and the Firebase Unity SDK to your Unity project\n as described in\n [Add Firebase to your Unity project](/docs/unity/setup#set_up_environment).\n Follow the instructions for Android.\n\n Be sure to import `FirebaseAuth.unitypackage`.\n2. In the Unity Editor, under **Build Settings \\\u003e Player Settings \\\u003e Other\n Settings** set the Android package name of your game.\n\n3. Then, under **Build Settings \\\u003e Player Settings \\\u003e Publishing Settings**,\n select or create a keystore and key, which will be used to sign your Android\n package. Your APK must be signed for Play Games sign-in to work---this\n requirement applies not just for publishing, but also during development of\n your game.\n\nSet up your Firebase project\n\n1. In the [Firebase console](//console.firebase.google.com/), go to the Firebase project\n in which you registered your Unity project.\n\n2. Set your game's SHA-1 fingerprint from the\n [Settings](//console.firebase.google.com/project/_/settings/general/) page\n of the Firebase console, using the key you set in Unity.\n\n You can get the SHA-1 fingerprint of your key with the `keytool` command: \n\n ```\n keytool -exportcert -list -v \\\n -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE\n ```\n\n \u003cbr /\u003e\n\n Alternatively, you can get the SHA hash of your signing certificate with the\n gradle `signingReport` command: \n\n ```\n gradlew signingReport\n ```\n\n \u003cbr /\u003e\n\n Your APK must be signed with this key, including during development.\n3. Enable Google Play Games as a sign-in provider:\n\n 1. In the Firebase console, open the\n [**Authentication** section](//console.firebase.google.com/project/_/authentication/providers).\n\n 2. Generate and obtain your project's web server client ID and client\n secret:\n\n 1. Within the **Sign in method** tab, enable the **Google** sign-in\n provider.\n\n 2. Copy the web server client ID and secret from the **Google** sign-in\n provider.\n\n 3. Within the **Sign in method** tab, enable the **Play Games**\n sign-in provider, and specify your project's web server client ID and\n client secret, which you got in the last step.\n\nConfigure Play Games services with your Firebase app information\n\n1. In the\n [Google Play Console](https://play.google.com/console/developers),\n open your Google Play app or create one.\n\n2. In the *Grow* section, click\n **Play Games services \\\u003e Setup \\& Management \\\u003e Configuration**.\n\n3. Click **Yes, my game already uses Google APIs** , select your Firebase\n project from the list, and then click **Use**.\n\n4. On the Play Games services configuration page, click\n **Add Credential**.\n\n 1. Select the **Game server** type.\n 2. In the **OAuth client** field, select your project's web client ID. Be sure this is the same client ID you specified when you enabled Play Games sign-in.\n 3. Save your changes.\n5. Still on the Play Games services configuration page, click\n **Add Credential** again.\n\n 1. Select the **Android** type.\n 2. In the **OAuth client** field, select your project's Android client ID. (If you don't see your Android client ID, be sure you set your game's SHA-1 fingerprint in the Firebase console.)\n 3. Save your changes.\n6. On the **Events** , **Achievements** , and **Leaderboards** pages, create any\n Play Games resources you want to use with your game (if you don't\n want to use any immediately, you can create a placeholder entry). Then, on\n any of the **Events** , **Achievements** , or **Leaderboards** pages, click\n **Get resources** and copy the Android resources snippet somewhere\n convenient. You will need the snippet to set up the Google Play Games services\n plugin.\n\n The resources snippet looks like the following example: \n\n \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n \u003c!--\n Google Play game services IDs.\n Save this file as res/values/games-ids.xml in your project.\n --\u003e\n \u003cresources\u003e\n \u003c!-- app_id --\u003e\n \u003cstring name=\"app_id\" translatable=\"false\"\u003e123456789000\u003c/string\u003e\n \u003c!-- package_name --\u003e\n \u003cstring name=\"package_name\" translatable=\"false\"\u003ecom.example.game\u003c/string\u003e\n \u003c!-- event Wiped Raid --\u003e\n \u003cstring name=\"event_wiped_raid\" translatable=\"false\"\u003eCgkIpKjv1a4PEAIYBA\u003c/string\u003e\n \u003c/resources\u003e\n\n7. On the **Testers** page, add the email addresses of any users who need\n to be able to sign in to your game before you release it on the\n Play Store.\n\nIntegrate Play Games sign-in into your game\n\n1. Download the latest release of the\n [Play Games plugin for Unity](https://github.com/playgameservices/play-games-plugin-for-unity/releases)\n and extract it.\n\n2. Import the plugin's Unity package into your Unity project. You can find the\n Unity package in the `current-build` directory of the release archive.\n\n3. Set up the Play Games plugin:\n\n 1. Click **Window \\\u003e Google Play Games \\\u003e Setup \\\u003e Android Setup** to open the **Android Configuration** screen.\n 2. Paste the Android resources snippet you got from the Play console into the **Resources Definition** field.\n 3. Paste your web server client ID, which you provided when you enabled Play Games sign-in in the Firebase console, into the **Client ID** field.\n 4. Click **Setup**.\n4. In your game, configure a Play Games client with the `RequestServerAuthCode`\n setting enabled:\n\n using GooglePlayGames;\n using GooglePlayGames.BasicApi;\n using UnityEngine.SocialPlatforms;\n using System.Threading.Tasks;\n\n PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()\n .RequestServerAuthCode(false /* Don't force refresh */)\n .Build();\n\n PlayGamesPlatform.InitializeInstance(config);\n PlayGamesPlatform.Activate();\n\n5. Then, when a player chooses to sign in with Play Games, call\n `Social.localUser.Authenticate()`:\n\n Social.localUser.Authenticate((bool success) =\u003e {\n // handle success or failure\n });\n\nAuthenticate with Firebase\n\nAfter you add Play Games sign-in to your game, you can use the auth code from\nPlay Games services to authenticate with Firebase.\n\n1. After the player has successfully signed in using Play Games, in the sign-in\n continuation handler, get an auth code for the player's account:\n\n Social.localUser.Authenticate((bool success) =\u003e {\n if (success) {\n authCode = PlayGamesPlatform.Instance.GetServerAuthCode();\n }\n });\n\n2. Then, exchange the auth code from Play Games services for a Firebase\n credential, and use the Firebase credential to authenticate the player:\n\n Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;\n Firebase.Auth.Credential credential =\n Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);\n auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task =\u003e {\n if (task.IsCanceled) {\n Debug.LogError(\"SignInAndRetrieveDataWithCredentialAsync was canceled.\");\n return;\n }\n if (task.IsFaulted) {\n Debug.LogError(\"SignInAndRetrieveDataWithCredentialAsync encountered an error: \" + task.Exception);\n return;\n }\n\n Firebase.Auth.AuthResult result = task.Result;\n Debug.LogFormat(\"User signed in successfully: {0} ({1})\",\n result.User.DisplayName, result.User.UserId);\n });\n\nNext steps\n\nAfter a user signs in for the first time, a new user account is created and\nlinked to their Play Games ID. This new account is stored as part of your\nFirebase project, and can be used to identify a user across every app in your\nproject.\n\nIn your game, you can get the user's Firebase UID from the\n`Firebase.Auth.FirebaseUser` object: \n\n Firebase.Auth.FirebaseUser user = auth.CurrentUser;\n if (user != null && user.IsValid()) {\n string playerName = user.DisplayName;\n\n // The user's Id, unique to the Firebase project.\n // Do NOT use this value to authenticate with your backend server, if you\n // have one; use User.TokenAsync() instead.\n string uid = user.UserId;\n }\n\nIn your Firebase Realtime Database and Cloud Storage Security Rules, you can get\nthe signed-in user's unique user ID from the `auth` variable, and use it to\ncontrol what data a user can access.\n\nTo get a user's Play Games player information or to access Play Games services,\nuse the APIs provided by the Play Games plugin.\n\nTo sign out a user, call `SignOut()`: \n\n auth.SignOut();"]]