Autenticação de plataforma para jogos Android

Para acessar a funcionalidade dos Serviços do Google Play Games, seu jogo precisa fornecer a conta do jogador autenticado. Esta documentação descreve como implementar uma experiência de autenticação perfeita no seu jogo.

O SDK dos serviços do Google Play Games v2 traz uma série de melhorias que aumentam o número de usuários autenticados no jogo e facilitam o desenvolvimento:

  • Melhorias para os usuários:
    • Depois de selecionar uma conta padrão, os usuários são autenticados sem precisar interagir com uma solicitação.
    • Os usuários não precisam mais fazer o download do app Play Games para autenticar com os serviços do Google Play Games nem criar uma nova conta.
    • Agora os usuários podem gerenciar as contas dos serviços relacionados a jogos do Google Play para vários jogos em uma única página.
  • Melhorias para desenvolvedores:
  • O código do cliente não precisa mais processar o fluxo de autenticação ou saída, já que o login é acionado automaticamente quando o jogo é iniciado, e o gerenciamento da conta é processado nas configurações do SO.

Integração de novos clientes

Esta seção mostra como fazer uma integração de novos clientes com o login dos serviços relacionados a jogos do Google Play v2.

Adicionar a dependência

Adicione a dependência do SDK dos serviços relacionados a jogos do Google Play ao arquivo build.gradle no nível raiz do app. Se você estiver usando o Gradle, vai poder adicionar ou atualizar a dependência da seguinte maneira:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

Definir o ID do projeto

Para adicionar o ID do projeto do SDK dos serviços relacionados a jogos do Google Play ao seu app, siga estas etapas:

  1. No arquivo AndroidManifest.xml do seu app, adicione o seguinte elemento <meta-data> e atributos ao elemento <application>:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    

    Defina a referência @string/game_services_project_id do recurso de string usando o ID do projeto do jogo nos serviços relacionados a jogos como o valor. O ID do projeto nos serviços relacionados a jogos pode ser encontrado abaixo do nome do jogo na página Configuração do Google Play Console.

  2. No seu arquivo res/values/strings.xml, adicione uma referência de recurso de string e defina o ID do projeto como o valor. No Google Play Console, você encontra o ID do projeto abaixo do nome do jogo na página Configuração. Exemplo:

    <!-- res/values/strings.xml -->
    <resources>
      <!-- Replace 0000000000 with your game's project id. Example value shown above.  -->
      <string translatable="false"  name="game_services_project_id"> 0000000000 </string>
    </resources>
    

Inicializar o SDK

Inicialize o SDK do Play Games no callback onCreate(..) da classe Application.

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

Receber o resultado da autenticação

Quando o jogo é iniciado, ele sempre tenta autenticar o usuário. Para autenticar o usuário, você precisa verificar se ele fez login e, em seguida, receber o ID do jogador.

Para verificar a tentativa de autenticação, chame GamesSignInClient.isAuthenticated() e use addOnCompleteListener para recuperar os resultados. Exemplo:

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());

gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
  boolean isAuthenticated =
    (isAuthenticatedTask.isSuccessful() &&
     isAuthenticatedTask.getResult().isAuthenticated());

  if (isAuthenticated) {
    // Continue with Play Games Services
  } else {
    // Show a sign-in button to ask players to authenticate. Clicking it should
    // call GamesSignInClient.signIn().
  }
});

Impedir a criação automática de perfis

É possível desativar os avisos de criação de perfil acionados automaticamente pelo arquivo de manifesto. Isso permite que usuários sem um perfil dos serviços do Google Play Games continuem carregando o jogo sem precisar criar um perfil dos serviços do Google Play Games. Para mais informações, consulte Opções de criação de perfil.

Para usar esse recurso, verifique se as seguintes condições foram atendidas:

  • Não há um perfil dos serviços do Google Play Games em nenhuma das Contas do Google conectadas no dispositivo.
  • Seu jogo está integrado ao SDK dos serviços do Google Play Games com.google.android.gms:play-services-games-v2:21.0.0 ou mais recente.

Para evitar os prompts de criação de perfil acionados automaticamente, siga estas etapas:

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

    <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 de criação de perfil para usuários no dispositivo que não têm um perfil dos serviços do Google Play Games.

  2. Quando você chama qualquer API dos serviços do Google Play Games, o código de status GamesClientStatusCodes.SIGN_IN_REQUIRED indica que a chamada falhou porque o usuário não pôde ser autenticado automaticamente devido à ausência de um perfil dos serviços do Google Play Games.

    Isso permite que usuários sem um perfil dos serviços do Google Play Games continuem com os métodos de autenticação implementados sem receber imediatamente uma solicitação para criar um perfil dos serviços do Google Play Games. Para iniciar a criação de perfil, chame GamesSignInService.signin().

    import com.google.android.gms.games.PlayGames;
    ...
    
    // Get the achievements client using Play Games services.
    AchievementsClient achievementsClient = PlayGames.getAchievementsClient(getActivity());
    achievementsClient.getAchievementsIntent()
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception exception) {
                int statusCode = ((ApiException) exception).getStatusCode();
                if (statusCode == GamesClientStatusCodes.SIGN_IN_REQUIRED) {
                  // SIGN_IN_REQUIRED: The user needs to sign in with Play Games Services.
                  // Call GamesSignInService.signin() to prompt for
                  // authentication at a suitable time which will trigger the
                  // profile creation UI.
                  // (e.g., after a tutorial). Use GamesSignInService.isAuthenticated() to check auth status.
                }
              }
            });
  3. Depois de adicionar a tag de supressão, use a janela logcat para verificar a adição. A saída de logcat contém uma mensagem semelhante a esta: "O jogo recusou o aviso de criação automática de perfil (usando o manifesto)".