Autenticar no Unity usando os serviços de jogos do Google Play

Você pode usar os serviços do Google Play Games para conectar jogadores em um jogo Android criado no Firebase e no Unity. Para usar o login dos serviços Google Play Games com o Firebase, primeiro faça login no player com o Google Play Games e solicite um código de autenticação OAuth 2.0 ao fazer isso. Em seguida, passe o código de autenticação para PlayGamesAuthProvider para gerar uma credencial do Firebase, que você pode usar para autenticar com o Firebase.

Antes de você começar

Configure seu projeto Unity

  1. Adicione o arquivo de configuração do Firebase e o SDK do Firebase para Unity ao seu projeto do Unity, conforme descrito em Adicionar o Firebase ao seu projeto do Unity . Siga as instruções para Android.

    Certifique-se de importar FirebaseAuth.unitypackage .

  2. No Editor Unity, em Configurações de compilação > Configurações do jogador > Outras configurações, defina o nome do pacote Android do seu jogo.

  3. Em seguida, em Build Settings > Player Settings > Publishing Settings , selecione ou crie um keystore e uma chave, que serão usados ​​para assinar seu pacote Android. Seu APK deve ser assinado para que o login no Play Games funcione. Esse requisito se aplica não apenas à publicação, mas também durante o desenvolvimento do seu jogo.

Configure seu projeto do Firebase

  1. No console do Firebase , acesse o projeto do Firebase no qual você registrou seu projeto do Unity.

  2. Defina a impressão digital SHA-1 do seu jogo na página Configurações do console do Firebase, usando a chave que você definiu no Unity.

    Você pode obter 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

    Como alternativa, você pode obter o hash SHA do seu certificado de assinatura com o comando gradle signingReport :

    gradlew signingReport

    Seu APK deve ser assinado com esta chave, inclusive durante o desenvolvimento.

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

    1. No console do Firebase, abra a seção Autenticação .

    2. Gere e obtenha o ID do cliente do servidor web e o segredo do cliente do seu projeto:

      1. Na guia Método de login , habilite o provedor de login do Google .

      2. Copie o ID do cliente do servidor Web e o segredo do provedor de login do Google .

    3. Na guia Método de login , ative o provedor de login do Play Games e especifique o ID do cliente do servidor Web e o segredo do cliente do seu projeto, obtidos na última etapa.

Configure os serviços do Play Games com as informações do seu aplicativo Firebase

  1. No Google Play Console , abra seu aplicativo Google Play ou crie um.

  2. Na seção Crescer , clique em Serviços do Play Games > Configuração e gerenciamento > Configuração .

  3. Clique em Sim, meu jogo já usa APIs do Google , selecione seu projeto do Firebase na lista e clique em Usar .

  4. Na página de configuração dos serviços do Play Games, clique em Adicionar credencial .

    1. Selecione o tipo de servidor de jogo .
    2. No campo Cliente OAuth , selecione o ID do cliente web do seu projeto. Certifique-se de que este seja o mesmo ID de cliente especificado quando ativou o login no Play Games.
    3. Salve suas alterações.
  5. Ainda na página de configuração dos serviços do Play Games, clique novamente em Adicionar credencial .

    1. Selecione o tipo de Android .
    2. No campo Cliente OAuth , selecione o ID do cliente Android do seu projeto. (Se você não vir seu ID de cliente Android, defina a impressão digital SHA-1 do jogo no console do Firebase.)
    3. Salve suas alterações.
  6. Nas páginas Eventos , Conquistas e Placares de classificação , crie os recursos do Play Games que deseja usar com seu jogo (se não quiser usar nenhum imediatamente, você pode criar uma entrada de espaço reservado). Em seguida, em qualquer uma das páginas Eventos , Conquistas ou Placares de líderes , clique em Obter recursos e copie o snippet de recursos do Android em algum lugar conveniente. Você precisará do snippet para configurar o plug-in de serviços do Google Play Games.

    O snippet de recursos se parece com o exemplo a seguir:

    <?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 Testadores , adicione os endereços de e-mail de todos os usuários que precisam fazer login no jogo antes de lançá-lo na Play Store.

Integre o login do Play Games ao seu jogo

  1. Baixe a versão mais recente do plug-in Play Games para Unity e extraia-a.

  2. Importe o pacote Unity do plugin para o seu projeto Unity. Você pode encontrar o pacote Unity 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 obtido no console do Play no campo Definição de recursos .
    3. Cole o ID do cliente do servidor da Web, que você forneceu quando ativou o login do Play Games no console do Firebase, no campo ID do cliente .
    4. Clique em Configuração .
  4. No jogo, configure um cliente do Play Games com a configuração RequestServerAuthCode ativada:

    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. Então, quando um jogador optar por fazer login no Play Games, chame Social.localUser.Authenticate() :

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

Autenticar com Firebase

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

  1. Depois que o jogador fizer login usando o Play Games, no gerenciador de continuação de login, obtenha 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 e use a credencial do Firebase para autenticar o jogador:

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

Próximos passos

Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada ao ID do Play Games. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em todos os aplicativos do seu projeto.

No seu jogo, você pode obter o UID do Firebase do usuário no objeto Firebase.Auth.FirebaseUser :

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
  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 obter o ID de usuário exclusivo do usuário conectado na variável auth e usá-lo para controlar quais dados um usuário pode acessar.

Para obter informações de jogador do Play Games de um usuário ou 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();