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

Esta página descreve como migrar seu código de cliente dos serviços relacionados a jogos do Google Play v1 para 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 usar o GoogleSignInClient do SDK GoogleSignIn para fazer login, você pode usar GamesSignInClient.isAuthenticated() para buscar o resultado da tentativa de login automático.
  2. As classes do Client Factory não precisam mais que um objeto GoogleSignInAccount seja transmitido. Não é possível solicitar escopos OAuth extras (GAMES_LITE e SCOPE_APPFOLDER serão solicitados automaticamente).
  3. Os tokens de autenticação agora são fornecidos usando GamesSignInClient.requestServerSideAccess() no SDK dos serviços relacionados a jogos do Google Play.
  4. O método de saída do jogo foi removido, e não vamos exigir mais que um botão seja exibido no jogo para fazer login ou sair dos serviços relacionados a jogos do Google Play.

Além disso, o jogo passará por logins adicionais devido ao login automático quando for iniciado. Por isso, veja o tópico gerenciamento de cotas para garantir que o jogo não exceda á cota de solicitações de login.

Direcionar ao novo repositório Maven do SDK

Se você estiver usando o sistema de compilação do Gradle, isso poderá ser feito mudando sua dependência para o artefato com.google.android.gms:play-services-games-v2:+ 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 adicionais além de GAMES, GAMES_LIGHT e SCOPE_APPFOLDER, a migração do seu 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 via 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. Ela foi descontinuada no final de 2017 e substituída por clientes "sem conexão". Para migrar, substitua a classe GoogleApiClient por uma equivalente "sem conexão". Também será necessário seguir as orientações acima para migrar o jogo da v1 para a v2. Veja abaixo 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