Migrar para o login dos serviços relacionados a jogos do Google Play v2

Este guia descreve como migrar seu código de cliente dos serviços relacionados a jogos do Google Play da v1 para a v2.

O novo SDK contém quatro mudanças importantes para aprimorar o login que você precisa conhecer:

  1. O login é acionado automaticamente quando o jogo é iniciado. Em vez de usando o GoogleSignInClient do SDK GoogleSignIn para fazer login, você pode usar GamesSignInClient.isAuthenticated() para buscar o resultado do erro tentativa de login.
  2. As classes do Client Factory não precisarão mais que um objeto GoogleSignInAccount seja transmitido. Não é possível solicitar escopos OAuth extras (GAMES_LITE será solicitadas automaticamente).
  3. Os tokens de autenticação agora são fornecidos GamesSignInClient.requestServerSideAccess() nos serviços relacionados a jogos do Google Play SDK do Vertex AI Pipelines.
  4. O método de saída da conta foi removido, e não exigiremos mais uma entrada no jogo para fazer login ou sair dos serviços relacionados a jogos do Google Play.

Além disso, seu jogo passará por mais logins devido ao uso automático fazer login quando o jogo for iniciado. Por isso, você deve revisar seus gerenciamento de cotas para que seu jogo não ultrapasse a cota de solicitação de login.

Direcionar ao novo repositório Maven do SDK

Se você está usando o sistema de build do Gradle, isso pode ser feito alterando as dependência do artefato com.google.android.gms:play-services-games-v2:+ em no arquivo build.gradle do módulo. Exemplo:

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

Inicializar o SDK

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

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

...

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

Remover chamadas de login e de saída

Se você não especificar escopos extras, a migração do caso de uso será simples.

  1. Remova chamadas de login usando a API GoogleSignIn. O login sempre será executado na inicialização do jogo. Em vez disso, detecte o resultado da tentativa de login automático usando GamesSignInClient.isAuthenticated().

    GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());
    
    gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
      boolean isAuthenticated =
        (isAuthenticatedTask.isSuccessful() &&
         isAuthenticatedTask.getResult().isAuthenticated());
    
      if (isAuthenticated) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a
        // login button to ask  players to sign-in. Clicking it should
        // call GamesSignInClient.signIn().
      }
    });
    
  2. Remova todas as chamadas para sair, já que o gerenciamento de contas agora está contido nas configurações do app do SO e do Play Games.

  3. Se o jogador tiver feito login, remova o botão de login do Play Games do seu jogo. Se o usuário opta por não fazer login quando o jogo é iniciado, você pode continuar a exibir um botão com o ícone do Play Games e acionar o processo de login com GamesSignInClient.signIn().

  4. Depois de verificar se o usuário está conectado, você pode recuperar o ID do jogador para identificá-lo.

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
  5. Remova a dependência da API GoogleSignIn, caso ela não esteja mais sendo usada.

Atualizar nomes de classes do cliente

Ao criar clientes (por exemplo, LeaderboardsClient ou AchievementsClient) use PlayGames.getFooClient() em vez de Games.getFooClient().

Solicitar acesso do lado do servidor

Ao solicitar acesso do lado do servidor, use GamesSignInClient.requestServerSideAccess(), em vez de GoogleSignInAccount.getServerAuthCode().

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this);
gamesSignInClient
  .requestServerSideAccess(OAUTH_2_WEB_CLIENT_ID,
                           /*forceRefreshToken=*/ false)
  .addOnCompleteListener( task -> {
    if (task.isSuccessful()) {
      String serverAuthToken = task.getResult();
      // Send authentication code to the backend game server to be
      // exchanged for an access token and used to verify the
      // player with the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

Remover escopos extras

Com os serviços relacionados a jogos do Google Play v2, não é possível solicitar escopos adicionais. Se você ainda precisar solicitar escopos adicionais, recomendamos usar o SDK de Login do Google com os serviços relacionados a jogos do Google Play.

Migração do GoogleApiClient

Para integrações já existentes mais antigas, seu jogo pode depender da variação da API GoogleApiClient do SDK dos serviços relacionados a jogos do Google Play. Isso foi suspenso no fim de 2017 e substituída por "sem conexão" clientes. Para migrar, substitua a classe GoogleApiClient por uma equivalente "sem conexão". Em seguida, você também vai precisa seguir as orientações nesta página para migrar o jogo da v1 para a v2. Este é um mapeamento de classes comuns:

com.google.android.gms.games.achievement.Achievements ->
    com.google.android.gms.games.AchievementsClient

com.google.android.gms.games.leaderboard.Leaderboard ->
    com.google.android.gms.games.LeaderboardsClient

com.google.android.gms.games.snapshot.Snapshots ->
    com.google.android.gms.games.SnapshotsClient

com.google.android.gms.games.stats.PlayerStats ->
    com.google.android.gms.games.PlayerStatsClient

com.google.android.gms.games.Players ->
    com.google.android.gms.games.PlayersClient

com.google.android.gms.games.GamesStatusCodes ->
    com.google.android.gms.games.GamesClientStatusCodes