Como fazer a autenticação no Unity usando os serviços relacionados a jogos do Google Play

Você pode usar os serviços relacionados a jogos do Google Play para fazer login de usuários em um jogo para Android criado com Firebase e Unity. Para usar esse tipo de login com o Firebase, primeiro inicie a sessão do jogador no Google Play Games e solicite um código de autenticação OAuth 2.0. Em seguida, transmita o código de autenticação ao PlayGamesAuthProvider para gerar uma credencial do Firebase. Você pode usá-la para fazer autenticações com o Firebase.

Antes de começar

Configurar o Unity

  1. Adicione o Firebase e o SDK para Unity ao seu projeto do Unity, conforme descrito na seção "Configuração para Android" do guia Como adicionar o Firebase ao seu projeto do Unity.

    Não se esqueça de importar o FirebaseAuth.unitypackage.

  2. No editor do Unity, defina o nome do pacote do Android para seu jogo em Build Settings > Player Settings > Other Settings.

  3. Em seguida, acesse Build Settings > Player Settings > Publishing Settings para selecionar ou criar uma chave e um repositório de chaves que serão usados para fazer login no seu pacote do Android. Para que seu APK funcione, ele precisa estar assinado com o login do Play Games. Esse requisito se aplica não apenas à publicação, mas também ao período de desenvolvimento do seu jogo.

Configurar seu projeto do Firebase

  1. Adicione seu jogo a um projeto do Firebase a partir do Firebase console usando o nome do pacote que você definiu no Unity.

  2. Configure a impressão digital SHA-1 do seu jogo na página Configurações do Firebase console usando a chave definida no Unity.

    Consiga a impressão digital SHA-1 da sua chave com o comando keytool:

    keytool -exportcert -list -v \
        -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE
    Seu APK precisa estar assinado com essa chave, inclusive durante o desenvolvimento.

  3. Ative o Google Play Games como provedor de login:

    1. Encontre o código do cliente do servidor da Web e a chave secreta do cliente referente ao seu projeto. O código do cliente do servidor da Web identifica seu projeto do Firebase para os servidores de autenticação do Google Play.

      Para encontrar esses valores, faça o seguinte:

      1. Abra o projeto do Firebase na página de credenciais do Console de APIs do Google.
      2. Na seção de códigos do cliente OAuth 2.0, abra a página de detalhes do cliente da Web (criada automaticamente pelo serviço do Google). Nessa página, há uma lista com a chave secreta e o código do cliente do servidor da Web.
    2. Em seguida, no Console do Firebase, abra a seção Autenticação.

    3. Na guia Método de login, ative o provedor de login do Play Games. Será necessário especificar o código do cliente do servidor da Web e a chave secreta do cliente referente ao seu projeto, que você localizou no Console de APIs.

  1. Abra o Google Play Console e clique em Serviços relacionados a jogos.

  2. Clique em Adicionar um novo jogo. Nessa caixa de diálogo, clique em Já utilizo APIs do Google em meu jogo e clique no nome do seu projeto do Firebase na lista. Selecione uma categoria de jogo e clique em Continuar para acessar a página de detalhes do jogo.

  3. No final dessa página, verifique se todas as APIs necessárias estão ativadas.

  4. Em seguida, abra a página Apps vinculados e clique em Android. Especifique o nome do pacote do seu jogo e clique em Salvar e continuar. O console exibirá seu ID do cliente do Android. Você pode ignorar esse valor.

  5. Abra a página Apps vinculados novamente e clique em Vincular outro app > Web. Você usará essa página para permitir que o Firebase Auth recupere tokens de autenticação do Google Play.

    No campo URL de inicialização, especifique qualquer URL controlado por você, como um que use seu domínio firebaseapp.com: https://myfirebaseproject-1ac49.firebaseapp.com/. Esse URL não precisa ser válido, mas é necessário especificar um valor diferente de localhost.

    Na página seguinte, clique em Mostrar apps e selecionar para escolher o ID do cliente do seu servidor da Web. Essa informação terá um URI de redirecionamento com a seguinte aparência: https://myfirebaseproject-1ac49.firebaseapp.com/__/auth/handler.

  6. Nas páginas Eventos, Conquistas e Placares, crie todos os recursos do Play Games que você quer usar no seu jogo. Caso não queira criar um recurso, crie uma entrada de marcador de posição. Em seguida, em qualquer uma das páginas Eventos, Conquistas ou Placares, clique em Acessar recursos e copie o snippet de recursos do Android para algum lugar de fácil acesso. Você precisará desse snippet para configurar o plug-in dos serviços do Google Play Games.

    O snippet de recursos terá a seguinte aparência:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    Google Play game services IDs.
    Save this file as res/values/games-ids.xml in your project.
    -->
    <resources>
      <!-- app_id -->
      <string name="app_id" translatable="false">123456789000</string>
      <!-- package_name -->
      <string name="package_name" translatable="false">com.example.game</string>
      <!-- event Wiped Raid -->
      <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string>
    </resources>
    
  7. Na página Teste, coloque na lista de permissões os endereços de e-mail de todos os usuários que precisem fazer login no seu jogo antes de liberá-lo na Play Store.

Integrar o login do Play Games ao seu jogo

  1. Faça o download da versão mais recente do Plug-in do Play Games para Unity e extraia o arquivo.

  2. Importe o pacote do Unity do plug-in no seu projeto do Unity. O pacote do Unity pode ser encontrado no diretório current-build do arquivo de lançamento.

  3. Configure o plug-in do Play Games:

    1. Clique em Janela > Google Play Games > Configuração > Configuração do Android para abrir a tela de configuração do Android.
    2. Cole o snippet de recursos do Android que você copiou do Play Console no campo Definição de recursos.
    3. Cole o ID do cliente do seu servidor da Web que você forneceu ao ativar o login do Play Games no Firebase console no campo ID do cliente.
    4. Clique em Configurar.
  4. No seu jogo, configure um cliente do Play Games com a configuração RequestServerAuthCode habilitada:

    using GooglePlayGames;
    using GooglePlayGames.BasicApi;
    using UnityEngine.SocialPlatforms;
    using System.Threading.Tasks;
    
    PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
        .RequestServerAuthCode(false /* Don't force refresh */)
        .Build();
    
    PlayGamesPlatform.InitializeInstance(config);
    PlayGamesPlatform.Activate();
    
  5. Em seguida, quando um jogador quiser fazer login com o Play Games, chame Social.localUser.Authenticate():

    Social.localUser.Authenticate((bool success) => {
      // handle success or failure
    });
    

Autenticar no Firebase

Depois de adicionar o login do Play Games ao seu jogo, você poderá usar o código de autenticação dos serviços do Play Games no Firebase.

  1. Depois que o usuário fizer login usando o Play Games, acesse o gerenciador de continuação do login e receba um código de autenticação para a conta do jogador:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. Em seguida, troque o código de autenticação dos serviços do Play Games por uma credencial do Firebase que será usada para autenticar o usuário:

    Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
    Firebase.Auth.Credential credential =
        Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

Próximas etapas

Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada ao código do Play Games. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em cada app no seu projeto.

No seu jogo, é possível acessar o UID do Firebase do usuário com o objeto Firebase.Auth.FirebaseUser:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  string playerName = 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.
  string uid = user.UserId;
}

Nas regras de segurança do Firebase Realtime Database e do Cloud Storage, você pode usar a variável auth para encontrar o código de usuário único das pessoas que fizeram login. Use essa informação para controlar quais dados os usuários podem acessar.

Para ter acesso às informações do jogador do Play Games de um usuário ou para acessar os serviços do Play Games, use as APIs fornecidas pelo plug-in do Play Games.

Para desconectar um usuário, chame SignOut():

auth.SignOut();

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.