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

# Solution de repli pour la migration de Google Sign-in vers la connexion Play Games

> Méthode de repli pour les joueurs qui n'utilisent toujours pas l'identité Google Play Games après la mise à niveau du plug-in Play Games Plugin for Unity.

# Correctif pour l'utilisation de LoginWithGoogleAccount avec Play Games Plugin for Unity v0.11.x

Cet article décrit une solution de contournement lorsque vous recevez des erreurs en utilisant l'API **LoginWithGoogleAccount** après la mise à niveau vers une version de Play Games Plugin for Unity.

L'erreur se produit lorsque des joueurs existants n'ont pas [migré vers LoginWithGooglePlayGamesServices](/fr/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details#migration-steps) après la mise à niveau de [Play Games Plugin for Unity](https://github.com/playgameservices/play-games-plugin-for-unity) vers une version supérieure ou égale à v0.11.x. En effet, Google a supprimé la possibilité d'ajouter des étendues supplémentaires dans les versions du plug-in supérieures ou égales à 0.11.x.

Cette solution de contournement doit être considérée comme une alternative de repli, car la connexion via le navigateur peut affecter l'expérience du joueur.

## Avant de commencer

Suivez ces étapes générales pour corriger l'authentification lors de l'utilisation de la version la plus récente du plug-in.

1. Appeler manuellement les API Google OAuth2
2. Effectuer l'authentification du joueur dans un onglet du navigateur
3. Renvoyer un code d'authentification de redirection vers le jeu à l'aide des liens profonds Android.

## Recommandation

Tant que vous utilisez encore la version 0.10.x du plug-in, [migrez vos utilisateurs vers l'API LoginWithGooglePlayGamesServices](/fr/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details#migration-steps). Utilisez les étapes suivantes comme méthode de repli pour le reste de vos joueurs après la mise à niveau vers la version 0.11.x ou ultérieure du plug-in.

## Étapes de correction

1. Ajoutez un intent Android à votre jeu à l'aide des liens profonds. (Étapes adaptées de [Unity - Manual: Deep linking on Android (unity3d.com)](https://docs.unity3d.com/2021.2/Documentation/Manual/deep-linking-android.html))

   a. Dans la fenêtre Project, accédez à **Assets > Plugins > Android**.

   b. Créez un nouveau fichier et nommez-le **AndroidManifest.xml**. Unity traite automatiquement ce fichier lorsque vous générez votre application.

   c. Copiez l'exemple de manifeste suivant dans le nouveau fichier, mettez à jour l'élément data avec l'URI de votre application et enregistrez-le. Pour plus d'informations sur la création d'une balise data appropriée, consultez [cet article](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. Assurez-vous que la propriété **autoVerify** existe sur la balise intent-filter.

2. Pour que les liens profonds fonctionnent, à partir d'Android 12, Google exige désormais que les développeurs hébergent un fichier assetlinks.json à un emplacement connu afin de rediriger correctement vers votre application.

   Par exemple, si votre URI de redirection est [https://mytestapp.com/path1/subpath](https://mytestapp.com/path1/subpath), vous devez héberger un fichier assetlinks.json valide à l'adresse [https://mytestapp.com/.well-known/assetlinks.json](https://mytestapp.com/.well-known/assetlinks.json) ; sinon, les liens profonds ne fonctionnent pas et vous n'êtes pas redirigé vers votre application pour continuer.
   Pour plus d'informations sur la création d'un fichier assetlinks.json, consultez [Verify Android App Links](https://developer.android.com/training/app-links/verify-android-applinks).

3. Ajoutez le traitement des liens profonds à votre jeu. (Étapes adaptées 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. Ajoutez du code pour lancer un navigateur vers l'API Google OAuth2 et laisser le joueur se connecter via le navigateur. Si le joueur est déjà connecté dans son navigateur, la transition est transparente ; sinon, il doit saisir ses informations d'identification.

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

   L'URI de redirection doit correspondre au filtre d'intent Android ajouté à l'étape 1. Ainsi, lorsque l'utilisateur termine l'authentification, le navigateur accède à cet URI de redirection et doit demander à l'utilisateur s'il souhaite revenir à l'application.

5. Vous devriez maintenant être prêt à tester. Lorsque vous déclenchez l'authentification, un navigateur doit s'ouvrir et l'utilisateur doit se connecter en conséquence. À moins que les données du navigateur ne soient supprimées, cette étape ne devrait être effectuée qu'une seule fois.

   <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="Utilisation de LoginWithGoogleAccount, étape 1" width="413" height="881" data-path="images/playfab/identity/player-identity/platform-specific-authentication/tutorials/google-unity/LWGA-fix-1.png" />

6. Une fois l'authentification terminée par l'utilisateur, le navigateur demande quelle application doit ouvrir l'URL de redirection.

   <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="Utilisation de LoginWithGoogleAccount, étape 2" width="412" height="879" data-path="images/playfab/identity/player-identity/platform-specific-authentication/tutorials/google-unity/LWGA-fix-2.png" />

7. Cette action ramène à notre application, et nous pouvons récupérer le code à partir des paramètres de requête de l'URL de redirection, puis appeler 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="Utilisation de LoginWithGoogleAccount, étape 3" width="415" height="879" data-path="images/playfab/identity/player-identity/platform-specific-authentication/tutorials/google-unity/LWGA-fix-3.png" />

8. Enfin, nous vous recommandons d'utiliser cette méthode comme alternative de repli pour tous les utilisateurs qui n'ont pas pu être migrés à l'aide des [étapes de migration](/fr/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details#migration-steps).

***N'oubliez pas que vous devez suivre les utilisateurs déjà migrés vers LoginWithGooglePlayGamesServices, privilégier le mécanisme de connexion automatique fourni par le plug-in et n'utiliser cette méthode que comme solution de contournement pour les utilisateurs qui n'ont pas été migrés.***


## Related topics

- [Migrer de Google Sign-in vers Google Play Games dans Unity](/fr/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details.md)
- [Migrer les jeux Unity vers la connexion Google Play Games](/fr/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration.md)
- [IXtfUserClient::SigninUser](/fr/reference/tools/xtf/xtfuser/classes/IXtfUserClient/methods/signinuser-ixtfuserclient-xtfuser-xbox-windows-m.md)
- [Authentification PlayFab avec la connexion Google Play Games dans Unity](/fr/services/playfab/identity/player-identity/platform-specific-authentication/google-sign-in-unity.md)
- [Connexion à Game Manager](/fr/services/playfab/live-service-management/gamemanager/game-manager-login.md)
