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

# Fallback da migração da entrada com o Google para a entrada com o Play Games

> Método de fallback para jogadores que ainda não usam a identidade do Google Play Games após a atualização do plug-in Play Games Plugin for Unity.

# Correção para usar LoginWithGoogleAccount no Play Games Plugin for Unity v0.11.x

Este artigo descreve uma solução alternativa para quando você recebe erros ao usar a API **LoginWithGoogleAccount** após atualizar para uma versão do Play Games Plugin for Unity.

O erro ocorre quando os jogadores existentes não [migraram para usar LoginWithGooglePlayGamesServices](/pt-BR/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details#migration-steps) depois que você atualizou o [Play Games Plugin for Unity](https://github.com/playgameservices/play-games-plugin-for-unity) para uma versão maior ou igual a v0.11.x. O motivo é que o Google removeu a possibilidade de adicionar escopos extras nas versões do plug-in maiores ou iguais a 0.11.x.

Essa solução alternativa deve ser considerada uma alternativa de fallback, pois a necessidade de entrar pelo navegador pode afetar a experiência do jogador.

## Antes de começar

Siga estas etapas de alto nível para corrigir a autenticação ao usar a versão mais recente do plug-in.

1. Chamar manualmente as APIs OAuth2 do Google
2. Executar a autenticação do jogador em uma guia do navegador
3. Obter um código de autenticação de redirecionamento de volta para o jogo usando links diretos do Android.

## Recomendação

Enquanto ainda estiver usando a versão 0.10.x do plug-in, [migre seus usuários para usar a API LoginWithGooglePlayGamesServices](/pt-BR/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details#migration-steps). Use as etapas a seguir como método de fallback para o restante dos seus jogadores após atualizar para a versão 0.11.x ou posterior do plug-in.

## Etapas de correção

1. Adicione um intent do Android ao seu jogo usando links diretos. (Etapas adaptadas de [Unity - Manual: Deep linking on Android (unity3d.com)](https://docs.unity3d.com/2021.2/Documentation/Manual/deep-linking-android.html))

   a. Na janela Project, vá para **Assets > Plugins > Android**.

   b. Crie um novo arquivo e chame-o de **AndroidManifest.xml**. O Unity processa automaticamente esse arquivo quando você compila seu aplicativo.

   c. Copie o exemplo de manifesto a seguir no novo arquivo, atualize o elemento data com o URI do seu aplicativo e salve-o. Para obter mais informações sobre como criar uma tag data adequada, confira [este artigo](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. Certifique-se de que a propriedade **autoVerify** exista na tag intent-filter.

2. Para que os links diretos funcionem, a partir do Android 12, o Google agora exige que os desenvolvedores hospedem um arquivo assetlinks.json em um local conhecido para redirecionar com êxito para o aplicativo.

   Por exemplo, se o seu URI de redirecionamento for [https://mytestapp.com/path1/subpath](https://mytestapp.com/path1/subpath), você deverá hospedar um arquivo assetlinks.json válido em [https://mytestapp.com/.well-known/assetlinks.json](https://mytestapp.com/.well-known/assetlinks.json); caso contrário, os links diretos não funcionarão e você não será redirecionado de volta ao aplicativo para continuar.
   Para obter detalhes sobre como criar um arquivo assetlinks.json, confira [Verify Android App Links](https://developer.android.com/training/app-links/verify-android-applinks).

3. Adicione o processamento de links diretos ao seu jogo. (Etapas adaptadas 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. Adicione um código para abrir um navegador na API OAuth2 do Google e permitir que o jogador entre pelo navegador. Se o jogador já estiver conectado no navegador, a transição será perfeita; caso contrário, ele precisará inserir suas credenciais.

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

   O URI de redirecionamento deve corresponder ao filtro de intent do Android que adicionamos na etapa 1. Assim, quando o usuário concluir a autenticação, o navegador navegará até esse URI de redirecionamento e deverá perguntar ao usuário se ele deseja voltar ao aplicativo.

5. Agora, você deve estar pronto para testar. Quando você disparar a autenticação, um navegador deverá ser aberto e o usuário deverá entrar adequadamente. A menos que os dados do navegador sejam excluídos, esta etapa deverá ser um processo ú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="Usar LoginWithGoogleAccount: etapa 1" width="413" height="881" data-path="images/playfab/identity/player-identity/platform-specific-authentication/tutorials/google-unity/LWGA-fix-1.png" />

6. Depois que o usuário concluir a autenticação, o navegador perguntará em qual aplicativo a URL de redirecionamento deve ser aberta.

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

7. Essa ação navega de volta ao nosso aplicativo, e podemos obter o código dos parâmetros de consulta na URL de redirecionamento e prosseguir com a chamada de 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="Usar LoginWithGoogleAccount: etapa 3" width="415" height="879" data-path="images/playfab/identity/player-identity/platform-specific-authentication/tutorials/google-unity/LWGA-fix-3.png" />

8. Por fim, recomendamos usar este método como alternativa de fallback para os usuários que não puderam ser migrados usando as [etapas de migração](/pt-BR/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details#migration-steps).

***Lembre-se de que você deve acompanhar quais usuários já foram migrados para usar LoginWithGooglePlayGamesServices, dar preferência ao mecanismo de login automático fornecido pelo plug-in e usar este método como solução alternativa para os usuários que não foram migrados.***


## Related topics

- [Migrar jogos Unity para a entrada com o Google Play Games](/pt-BR/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration.md)
- [Migrar da entrada com o Google para o Google Play Games no Unity](/pt-BR/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details.md)
- [Autenticação do PlayFab com a entrada com o Google Play Games no Unity](/pt-BR/services/playfab/identity/player-identity/platform-specific-authentication/google-sign-in-unity.md)
- [Entrada](/pt-BR/build/core-features/common/input/gc-input-toc.md)
- [Entrar no Game Manager](/pt-BR/services/playfab/live-service-management/gamemanager/game-manager-login.md)
