> ## 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 plugiciel 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 les joueurs existants n'ont pas [migré vers LoginWithGooglePlayGamesServices](/fr-CA/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details#migration-steps) après que vous avez mis à niveau [Play Games Plugin for Unity](https://github.com/playgameservices/play-games-plugin-for-unity) vers une version supérieure ou égale à v0.11.x. La raison est que Google a retiré la possibilité d'ajouter des étendues supplémentaires dans les versions du plugiciel supérieures ou égales à 0.11.x.

Cette solution de contournement doit être considérée comme une solution de repli, puisque le fait de devoir se connecter au moyen du navigateur pourrait nuire à l'expérience du joueur.

## Avant de commencer

Suivez ces étapes générales pour corriger l'authentification lorsque vous utilisez la version la plus récente du plugiciel.

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

## Recommandation

Pendant que vous utilisez encore la version 0.10.x du plugiciel, [migrez vos utilisateurs vers l'API LoginWithGooglePlayGamesServices](/fr-CA/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 plugiciel.

## Étapes du correctif

1. Ajoutez une intention 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'information sur la façon de construire 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 savoir comment créer 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 ouvrir un navigateur vers l'API Google OAuth2 et laisser le joueur se connecter au moyen du navigateur. Si le joueur est déjà connecté dans son navigateur, la transition est transparente; sinon, il doit entrer 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'intention Android que nous avons ajouté à l'étape 1. Ainsi, lorsque l'utilisateur termine l'authentification, le navigateur accède à cet URI de redirection et devrait 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 devrait 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 que l'utilisateur a terminé l'authentification, le navigateur demandera avec quelle application 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 l'utilisateur à notre application, et nous pouvons obtenir 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 recommandons d'utiliser cette méthode comme solution de repli pour tous les utilisateurs qui n'ont pas pu être migrés à l'aide des [étapes de migration](/fr-CA/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details#migration-steps).

***N'oubliez pas de suivre quels utilisateurs ont déjà migré vers LoginWithGooglePlayGamesServices, de privilégier le mécanisme de connexion automatique fourni par le plugiciel et d'utiliser cette méthode 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-CA/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-CA/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration.md)
- [Authentification PlayFab avec Google Play Games Sign-In dans Unity](/fr-CA/services/playfab/identity/player-identity/platform-specific-authentication/google-sign-in-unity.md)
- [IXtfUserClient::SigninUser](/fr-CA/reference/tools/xtf/xtfuser/classes/IXtfUserClient/methods/signinuser-ixtfuserclient-xtfuser-xbox-windows-m.md)
- [Connexion à Game Manager](/fr-CA/services/playfab/live-service-management/gamemanager/game-manager-login.md)
