Configurar o Google Play Games para Unity e fazer a autenticação

Este documento orienta você na configuração do projeto do Unity para usar o plug-in do Google Play Games para Unity. Você vai aprender a instalar o plug-in e configurar o projeto do Unity. O documento também aborda como verificar o serviço de autenticação.

Antes de começar

Confira os requisitos de software. Configure o Play Console e instale o Unity Editor.

Instalação do plug-in

Para fazer o download e instalar o plug-in do Google Play Games para Unity, siga estas etapas no Unity Editor:

  1. Faça o download do repositório do GitHub.

  2. No diretório current-build, localize o arquivo unitypackage. Esse arquivo representa o plug-in. Por exemplo, ele deve ser semelhante a este:

      current-build/GooglePlayGamesPluginForUnity-X.YY.ZZ.unitypackage
    

Configurar o projeto do Unity

Para configurar um projeto do Unity nas configurações do player, siga estas etapas:

  1. Abra o projeto de jogo.

  2. No Unity Editor, clique em Assets > Import Package > Custom Package para importar o arquivo unitypackage para os recursos do projeto.

  3. Confira se a plataforma de build atual está definida como Android.

    1. No menu principal, clique em File > Build Settings.

    2. Selecione Android e clique em Switch Platform.

    3. Um novo item de menu vai aparecer em Window > Google Play Games. Se isso não acontecer, clique em Assets > Refresh para atualizar os recursos e tente definir a plataforma de build novamente.

  4. No Unity Editor, clique em File > Build Settings > Player Settings > Other Settings.

  5. Na caixa nível desejado da API, selecione uma versão.

  6. Na caixa Scripting backend, insira IL2CPP.

  7. Na caixa Target architectures, selecione um valor.

  8. Anote o nome do pacote package_name.Você pode usar essas informações mais tarde.

As configurações do player no seu projeto do Unity
As configurações do player no projeto do Unity.

Criar um novo keystore

Para validar suas credenciais, você precisa de uma chave. Siga estas etapas:

  1. No Unity Editor, clique em File > Build settings > Player settings.
  2. Na seção Publishing settings, clique em Keystore manager.
    1. Na janela Keystore manager, clique em Keystore > Create new > Anywhere.
    2. Selecione uma pasta e forneça um nome para o keystore.
    3. Na caixa Password, insira uma senha e confirme.
    4. Clique em Add key.

Anote o nome da pasta. Você pode usar esse nome para criar uma credencial em Google Cloud.

Copiar os recursos do Android do Play Console

Cada conquista, placar e evento criado no Play Console inclui um recurso do Android que você usa ao configurar seu projeto do Unity.

Para acessar os recursos do Android do seu jogo, siga estas etapas:

  1. No Google Play Console, abra o jogo.

  2. Na página serviços do Google Play Games - Configuration (Grow users > serviços do Google Play Games > Setup and management > Configuration), clique em Get resources.

  3. Na janela Resources, clique na guia Android(XML).

  4. Selecione e copie o conteúdo dos recursos do Android (AndroidManifest.xml).

Adicionar os recursos do Android ao seu projeto do Unity

Adicione os seguintes recursos do Android ao seu projeto do Unity:

  1. No Unity Editor, clique em Window > Google Play Games > Setup > Configuração do Android.

    • No campo Directory to save constants, insira o nome da pasta do arquivo de constantes.
    • No campo Constants class name, insira o nome da classe C# a ser criada, incluindo o namespace.

      Por exemplo, se a classe C# for id.cs e estiver presente em Assets > myproject > scripts > id.cs. O nome da classe de constantes pode ser myproject.scripts.id.

    • No campo Resources definition, cole os dados de recursos do Android (arquivo AndroidManifest.xml) que você copiou do Google Play Console.

    • Opcional: no campo Client ID, insira o ID do cliente do app da Web vinculado.

      Para acessar o ID do cliente do seu jogo no Google Cloud, consulte Criar IDs do cliente.

      Isso só será necessário se você tiver um back-end baseado na Web para o jogo e precisar que o código de autenticação do servidor seja trocado por um token de acesso pelo servidor de back-end ou se você precisar de um token de ID para o jogador fazer outras chamadas de API fora do jogo.

    • Clique em Setup. O jogo vai ser configurado com o ID do cliente e uma classe C# vai ser gerada com constantes para cada recurso do Android.

  2. No Unity Editor, clique em Window > Google Play Games > Setup > Nearby Connections Setup.

Escolher uma plataforma social

O plug-in dos serviços do Google Play Games implementa a interface social, do Unity para oferecer compatibilidade com jogos que já usam essa interface na integração com outras plataformas. No entanto, alguns recursos são exclusivos do Play Games e oferecidos como extensões da interface social padrão fornecida pelo Unity.

As chamadas de API padrão podem ser acessadas no objeto Social.Active , que é uma referência a uma interface ISocialPlatform. As extensões dos serviços do Google Play Games que não são padrão podem ser acessadas ao transmitir o objeto Social.Active para a classe PlayGamesPlatform, em que os outros métodos extra estão disponíveis.

Usar o plug-in sem substituir a plataforma social padrão

Quando você chama PlayGamesPlatform.Activate, os serviços do Google Play Games se tornam a implementação de plataforma social padrão. Isso significa que o plug-in dos serviços do Google Play Games realiza chamadas estáticas para métodos em Social e Social.Active, que é o comportamento esperado para a maioria dos jogos que usam o plug-in.

No entanto, se por algum motivo você quiser manter a implementação padrão acessível (por exemplo, para enviar conquistas e placares a uma plataforma social diferente), use o plug-in dos serviços do Google Play Games sem substituir a configuração padrão. Para fazer isto:

  1. Chame o método PlayGamesPlatform.Activate.
  2. Se Xyz for o nome de um método chamado na classe Social, não chame Social.Xyz. Em vez disso, chame PlayGamesPlatform.Instance.Xyz.
  3. Use a propriedade PlayGamesPlatform.Instance em vez de Social.Active ao interagir com os serviços do Google Play Games.

Dessa forma, é possível até enviar pontuações e conquistas simultaneamente a duas ou mais plataformas sociais:

    // Submit achievement to original default social platform
    Social.ReportProgress("MyAchievementIdHere", 100.0f, callback);

    // Submit achievement to Google Play
    PlayGamesPlatform.Instance.ReportProgress("MyGooglePlayAchievementIdHere", 100.0f, callback);

Verificar o serviço de autenticação

Uma conexão com os serviços do Google Play Games é automaticamente estabelecida usando a autenticação da plataforma quando o jogo é aberto. Se a conexão for bem-sucedida, seu jogo vai mostrar uma solicitação de login e vai estar pronto para usar o plug-in dos serviços do Google Play Games para Unity.

Se um usuário nunca tiver usado os serviços do Google Play Games no dispositivo, ele será direcionado automaticamente à tela de configuração única para criar uma conta do Play Games.

No método Start do script, detecte o resultado da tentativa de autenticação automática, busque o status de autenticação e desative os recursos dos serviços relacionados a jogos do Google Play, caso o usuário não esteja autenticado.

Se a versão do plug-in do Unity for anterior à v11, não será possível usar o recurso de autenticação.

    using GooglePlayGames;

    public void Start() {
      PlayGamesPlatform.Instance.Authenticate(ProcessAuthentication);
    }

    internal void ProcessAuthentication(SignInStatus status) {
      if (status == SignInStatus.Success) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a login button
        // to ask users to authenticate. Clicking it should call
        // PlayGamesPlatform.Instance.ManuallyAuthenticate(ProcessAuthentication).
      }
    }

O código de resultado é uma enumeração que pode ser usada para identificar o motivo da falha de autenticação.

Como alternativa, se você preferir usar a plataforma social do Unity, utilize o código abaixo:

  using GooglePlayGames;

  public void Start() {
    PlayGamesPlatform.Activate();
    Social.localUser.Authenticate(ProcessAuthentication);
  }

Não é possível fazer chamadas da API dos serviços do Google Play Games até receber um valor de retorno bem-sucedido de Authenticate. Como resultado, recomendamos que os jogos mostrem uma tela de espera até que o callback seja chamado para garantir que os usuários não possam começar a jogar até que a autenticação seja concluída.

Impedir a criação automática de perfis

É possível desativar os prompts de criação automática de perfis no arquivo de manifesto. Isso permite que usuários sem um perfil dos serviços do Google Play Games continuem carregando o jogo sem receber um prompt para criar um perfil desses serviços. Para mais informações, consulte Opções de criação de perfil.

Para usar esse recurso, confira se as seguintes condições são atendidas:

  1. No arquivo AndroidManifest.xml, adicione a com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION tag no <meta-data> elemento e atributos ao <application> elemento:

    <application>
        ...
        <meta-data
            android:name="com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION"
            android:value="true" />
        ...
    </application>

    Definir essa flag como "true" informa aos serviços do Google Play Games que seu jogo vai processar a criação de perfil. Consequentemente, os serviços do Google Play Games não vão mostrar automaticamente a interface do usuário de criação de perfil para usuários no dispositivo que não têm um perfil desses serviços.

  2. Para processar casos em que um usuário não está autenticado devido a um perfil dos serviços do Google Play Games ausente, use PlayGamesPlatform.Instance.IsAuthenticated(). Esse método retorna false porque a criação de perfil falha. Para resolver isso, inicie o processo de criação de perfil chamando PlayGamesPlatform.Instance.ManuallyAuthenticate().

    
    if (!PlayGamesPlatform.Instance.IsAuthenticated()) {
      // The user is unauthenticated, likely due to a missing Play Games profile.
      // Calling PlayGamesPlatform.Instance.ManuallyAuthenticate() will trigger
      // the profile creation UI.
      PlayGamesPlatform.Instance.ManuallyAuthenticate((SignInStatus status) => {
        // ...
      });
    }
    

  3. Depois de adicionar a tag de supressão, use a janela logcat para verificar a adição. A saída logcat contém uma mensagem semelhante a esta: "Game opted out of automatic profile creation prompt (using manifest)".

Usar a Assinatura de apps do Google Play

O Google gerencia e protege a chave de assinatura do app usando a Assinatura de apps do Google Play. Você pode usar a Assinatura de apps do Google Play para assinar a distribuição otimizada de arquivos do Android App Bundle. A Assinatura de apps do Google Play armazena sua chave de assinatura do app na infraestrutura protegida do Google. Para usar a Assinatura de apps do Google Play, primeiro é necessário criar e fazer o download de um arquivo AAB no Unity Editor. Em seguida, você pode fazer upload do arquivo AAB para o Play Console e criar uma versão de teste interno.

Criar um arquivo AAB

Para criar um arquivo AAB no Unity Editor, siga estas etapas:

  1. No Unity Editor, clique em File > Build settings.
  2. Selecione Build App Bundle ( Google Play ).

    Para mais informações, consulte a referência das configurações de build do Android .

  3. Clique em Build.

  4. Faça o download do arquivo AAB no Unity Editor.

Criar versão de teste interno

Para criar uma versão de teste interno e adicionar testadores no Play Console, siga estas etapas:

  1. No Google Play Console, selecione um jogo.
  2. Acesse a página Test and release (Testing > Internal testing).
  3. Clique em Upload e selecione o arquivo AAB.
  4. No campo Release details, insira um nome.
  5. Clique em Next e revise os detalhes da versão.
  6. Clique em Save and publish.
  7. Na guia Testers, clique em Create email list para adicionar até 100 testadores.

    Para mais informações, consulte Teste interno: gerenciar até cem testadores.

  8. No Feedback URL or email address, insira um URL de feedback ou um endereço de e-mail para fornecer feedback.

  9. Clique em Save.

Verificar as credenciais de assinatura de apps

  1. No Google Play Console, selecione um jogo.
  2. Acesse a página Test and release (Setup > Assinatura de apps).
  3. Verifique as credenciais de assinatura de apps.

Criar e executar o projeto

Agora você pode criar e executar o projeto de jogo neste ponto. Quando o jogo começar, você verá a tentativa de autenticação automática.

Você precisa de um dispositivo Android físico com a depuração USB ativada ou um emulador que possa executar o projeto desenvolvido.

Extrair códigos de autenticação do servidor

Para acessar as APIs do Google em um servidor da Web de back-end em nome do jogador atual, você precisa receber um código de autenticação do aplicativo cliente e fazer a transmissão ao aplicativo do servidor da Web. Depois disso, o código pode ser trocado por um token de acesso para fazer chamadas para as várias APIs. Para mais informações sobre o fluxo de trabalho, consulte Fazer login com o Google na Web.

Para receber o código de acesso do lado do servidor:

  1. Adicione o ID do cliente da Web do seu jogo no Play Console.
    1. No Google Play Console, selecione seu jogo.
    2. Na página Configuration (Grow users > serviços do Google Play Games > Setup and Management > Configuration), clique em Add credential.
    3. Na página Add credential, selecione Game server.
    4. Gere um ID do cliente OAuth 2.0.
    5. Anote o valor do ID do cliente. Você precisará fornecer esse valor mais tarde.
  2. Adicione o ID do cliente da Web ao Unity Hub.

    1. No Unity Hub, configure o Google Play Games para Unity e faça a autenticação.
    2. No Unity Hub, acesse Window > Google Play Games > Setup > Configuração do Android.
    3. Insira o valor do ID do cliente.
  3. Recupere o código de autenticação do servidor para outros escopos.

    C#

    using GooglePlayGames.BasicApi;
    
    // Define selectedScope having additional identity scopes.
    private List selectedScopes = new List();
    
    // Add scopes you want to request.
    selectedScopes.Add(AuthScope.OPEN_ID);
    selectedScopes.Add(AuthScope.PROFILE);
    selectedScopes.Add(AuthScope.EMAIL);
    
    // Call RequestServerSideAccess with additional scopes and retrieve
    // authcode and grantedscopes list.
    PlayGamesPlatform.Instance.RequestServerSideAccess(
        /* forceRefreshToken= */ false,selectedScopes
        (AuthResponse authResponse) =>
        {
        string authCode = authResponse.GetAuthCode();
        List grantedScopes = authResponse.GetGrantedScopes();
    
        // send authCode to server...
    });

Configurar e adicionar recursos