> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Método alternativo para la migración del inicio de sesión de Google al inicio de sesión de Play Games

> Método alternativo para los jugadores que aún no usan la identidad de Google Play Games después de actualizar el complemento Play Games Plugin for Unity.

# Corrección para usar LoginWithGoogleAccount en Play Games Plugin for Unity v0.11.x

En este artículo se describe una solución alternativa para cuando recibe errores al usar la API **LoginWithGoogleAccount** después de actualizar a una versión del complemento Play Games Plugin for Unity.

El error se produce cuando los jugadores existentes no [migraron para usar LoginWithGooglePlayGamesServices](/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details#migration-steps) después de que usted actualizara [Play Games Plugin for Unity](https://github.com/playgameservices/play-games-plugin-for-unity) a una versión igual o superior a la v0.11.x. La razón es que Google eliminó la posibilidad de agregar ámbitos adicionales en las versiones del complemento iguales o superiores a la 0.11.x.

Esta solución alternativa debe considerarse como una alternativa de reserva, ya que tener que iniciar sesión a través del explorador podría afectar a la experiencia del jugador.

## Antes de empezar

Siga estos pasos generales para corregir la autenticación al usar la versión más reciente del complemento.

1. Llamar manualmente a las API de OAuth2 de Google.
2. Realizar la autenticación del jugador en una pestaña del explorador.
3. Obtener un código de autenticación de redireccionamiento de vuelta al juego mediante vínculos profundos de Android.

## Recomendación

Mientras siga usando la versión 0.10.x del complemento, [migre a sus usuarios para que usen la API LoginWithGooglePlayGamesServices](/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details#migration-steps). Use los pasos siguientes como método alternativo para el resto de sus jugadores después de actualizar a la versión 0.11.x o posterior del complemento.

## Pasos de corrección

1. Agregue un intent de Android a su juego mediante vínculos profundos. (Pasos adaptados de [Unity - Manual: Deep linking on Android (unity3d.com)](https://docs.unity3d.com/2021.2/Documentation/Manual/deep-linking-android.html)).

   a. En la ventana Project, vaya a **Assets > Plugins > Android**.

   b. Cree un nuevo archivo y llámelo **AndroidManifest.xml**. Unity procesa automáticamente este archivo al compilar la aplicación.

   c. Copie el siguiente ejemplo de manifiesto en el nuevo archivo, actualice el elemento data con el URI de su aplicación y guárdelo. Para obtener más información sobre cómo crear una etiqueta data adecuada, consulte [este artículo](https://developer.android.com/guide/topics/manifest/data-element).

   ```xml theme={null}
   <?xml version="1.0" encoding="utf-8"?>
   <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
       <application>
       <activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector">
           <intent-filter>
           <action android:name="android.intent.action.MAIN" />
           <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>

           <intent-filter android:autoVerify="true">
           <action android:name="android.intent.action.VIEW" />

           <category android:name="android.intent.category.DEFAULT" />
           <category android:name="android.intent.category.BROWSABLE" />

           <data
               android:scheme="https"
               android:host="mytestapp.com"
               android:path="/path1/subpath" />
           </intent-filter>
           
       </activity>
       </application>
   </manifest>
   ```

   d. Asegúrese de que la propiedad **autoVerify** existe en la etiqueta intent-filter.

2. Para que los vínculos profundos funcionen, a partir de Android 12, Google exige ahora a los desarrolladores hospedar un archivo assetlinks.json en una ubicación conocida para redirigir correctamente a la aplicación.

   Por ejemplo, si su URI de redireccionamiento es [https://mytestapp.com/path1/subpath](https://mytestapp.com/path1/subpath), debe hospedar un archivo assetlinks.json válido en [https://mytestapp.com/.well-known/assetlinks.json](https://mytestapp.com/.well-known/assetlinks.json); de lo contrario, los vínculos profundos no funcionan y no se le redirige de vuelta a la aplicación para continuar.
   Para obtener más información sobre cómo crear un archivo assetlinks.json, consulte [Verify Android App Links](https://developer.android.com/training/app-links/verify-android-applinks).

3. Agregue el procesamiento de vínculos profundos a su juego. (Pasos adaptados de [Unity - Manual: Deep linking (unity3d.com)](https://docs.unity3d.com/2021.2/Documentation/Manual/deep-linking.html#using-deep-links)).

   ```csharp theme={null}
   using GooglePlayGames;
   using GooglePlayGames.BasicApi;
   using PlayFab;
   using PlayFab.ClientModels;
   using System;
   using UnityEngine;
   using UnityEngine.UI;

   public class ProcessDeepLinkMngr : MonoBehaviour
   {
       public static ProcessDeepLinkMngr Instance { get; private set; }

       private void Awake()
       {
           if (Instance == null)
           {
               Instance = this;
               Application.deepLinkActivated += onDeepLinkActivated;
               if (!string.IsNullOrEmpty(Application.absoluteURL))
               {
                   // Cold start and Application.absoluteURL not null so process Deep Link.
                   onDeepLinkActivated(Application.absoluteURL);
               }

               DontDestroyOnLoad(gameObject);
           }
           else
           {
               Destroy(gameObject);
           }
       }

       private void onDeepLinkActivated(string url)
       {
           Debug.Log("Got Deeplink Activated: " + url);

           // Decode the URL to extract auth code. 
           string queryParams = url.Split("?"[0])[1];
           string[] keyValuePairs = queryParams.Split("&");
           string authCode = string.Empty;

           foreach (string s in keyValuePairs)
           {
               if (s.StartsWith("code"))
               {
                   authCode = s.Split("=")[1];
                   break;
               }
           }

           if (!string.IsNullOrEmpty(authCode))
           {
               // Call the LoginWithGoogleAccount using the auth code
               Debug.Log("Authenticating to PlayFab using LoginWithGoogleAccount...");

               // Make sure to unescape string
               authCode = Uri.UnescapeDataString(authCode);

               var request = new LoginWithGoogleAccountRequest
               {
                   ServerAuthCode = authCode,
                   CreateAccount = true,
                   TitleId = PlayFabSettings.TitleId
               };

               PlayFabClientAPI.LoginWithGoogleAccount(request,
                   (LoginResult result) => {
                       Debug.Log("PlayFab LoginWithGoogleAccount Success.");
                   },
                   (PlayFabError error) => {
                       Debug.Log("PlayFab LoginWithGoogleAccount Failure: " + error.GenerateErrorReport());
                   }
               );
           }
           else
           {
               Debug.Log("Error when getting Auth Code.");
           }
       }
   }
   ```

4. Agregue código para abrir un explorador con la API de OAuth2 de Google y permitir que el jugador inicie sesión a través del explorador. Si el jugador ya tiene la sesión iniciada en su explorador, la transición es fluida; de lo contrario, tendrá que escribir sus credenciales.

   ```csharp theme={null}
   private string authorizationEndpoint = "https://accounts.google.com/o/oauth2/v2/auth";
   private string redirectURI = "[APPLICATION-REDIRECT-URI]";
   private object clientID = "[WEB-APPLICATION-CLIENT-ID]";
   private string scopes = "profile";

   private void LaunchBrowserAuth()
   {
       string authorizationRequest = string.Format("{0}?response_type=code&scope={1}&redirect_uri={2}&client_id={3}",
               authorizationEndpoint,
               scopes,
               Uri.EscapeDataString(redirectURI),
               clientID);

       Application.OpenURL(authorizationRequest);
   }
   ```

   El URI de redireccionamiento debe coincidir con el filtro de intent de Android que agregamos en el paso 1. Así, cuando el usuario termine la autenticación, el explorador navegará a ese URI de redireccionamiento y el explorador debería preguntar al usuario si quiere volver a la aplicación.

5. Ahora, debería estar listo para probarlo. Así, cuando desencadene la autenticación, debería abrirse un explorador y el usuario debe iniciar sesión según corresponda. A menos que se eliminen los datos del explorador, este paso debería ser un proceso único.

   <img src="https://mintcdn.com/microsoft-4404708b/mLCHf0iQv3VidfBe/images/playfab/identity/player-identity/platform-specific-authentication/tutorials/google-unity/LWGA-fix-1.png?fit=max&auto=format&n=mLCHf0iQv3VidfBe&q=85&s=f6b510051e5e1f3456012cb7ed882174" alt="Uso de LoginWithGoogleAccount, paso 1" width="413" height="881" data-path="images/playfab/identity/player-identity/platform-specific-authentication/tutorials/google-unity/LWGA-fix-1.png" />

6. Después de que el usuario complete la autenticación, el explorador preguntará en qué aplicación debe abrirse la URL de redireccionamiento.

   <img src="https://mintcdn.com/microsoft-4404708b/mLCHf0iQv3VidfBe/images/playfab/identity/player-identity/platform-specific-authentication/tutorials/google-unity/LWGA-fix-2.png?fit=max&auto=format&n=mLCHf0iQv3VidfBe&q=85&s=97d1b122fb3b35e0fa1cd97d2422200a" alt="Uso de LoginWithGoogleAccount, paso 2" width="412" height="879" data-path="images/playfab/identity/player-identity/platform-specific-authentication/tutorials/google-unity/LWGA-fix-2.png" />

7. Esta acción devuelve a nuestra aplicación y podemos obtener el código de los parámetros de consulta de la URL de redireccionamiento y proceder a llamar a LoginWithGoogleAccount.

   <img src="https://mintcdn.com/microsoft-4404708b/mLCHf0iQv3VidfBe/images/playfab/identity/player-identity/platform-specific-authentication/tutorials/google-unity/LWGA-fix-3.png?fit=max&auto=format&n=mLCHf0iQv3VidfBe&q=85&s=5286049daf40d5f57ae37bb3dce570a8" alt="Uso de LoginWithGoogleAccount, paso 3" width="415" height="879" data-path="images/playfab/identity/player-identity/platform-specific-authentication/tutorials/google-unity/LWGA-fix-3.png" />

8. Por último, recomendamos usar este método como alternativa de reserva para los usuarios que no se pudieron migrar mediante los [pasos de migración](/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details#migration-steps).

***Tenga en cuenta que debe llevar un registro de qué usuarios ya se migraron para usar LoginWithGooglePlayGamesServices y preferir el mecanismo de inicio de sesión automático que proporciona el complemento, y usar esto como solución alternativa para los usuarios que aún no se hayan migrado.***


## Related topics

- [Migración de juegos de Unity al inicio de sesión de Google Play Games](/es/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration.md)
- [Migración del inicio de sesión de Google al de Google Play Games en Unity](/es/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details.md)
- [Autenticación de PlayFab con el inicio de sesión de Google Play Games en Unity](/es/services/playfab/identity/player-identity/platform-specific-authentication/google-sign-in-unity.md)
- [Autenticación de inicio de sesión anónimo de servidor](/es/services/playfab/identity/player-identity/platform-specific-authentication/anonymous-login.md)
- [Inicio de sesión en Game Manager](/es/services/playfab/live-service-management/gamemanager/game-manager-login.md)
