Para acessar a funcionalidade dos serviços relacionados a jogos do Google Play, seu jogo precisa fornecer a conta do jogador conectado. Esta documentação descreve como implementar uma experiência de login perfeita no seu jogo.
O SDK dos serviços relacionados a jogos do Google Play v2 traz uma série de melhorias que aumentam o número de usuários conectados ao jogo e facilitam o desenvolvimento:
- Melhorias para os usuários:
- Depois de selecionar uma conta padrão, os usuários fazem login sem precisar interagir com uma solicitação.
- Os usuários não precisam mais fazer o download do app Play Games para fazer login nos serviços relacionados a jogos do Google Play 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 login 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:
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.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);
}
Acessar o resultado de login
Quando o jogo é iniciado, ele sempre tenta fazer o login do 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 login, 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 {
// Disable your integration with Play Games Services or show a
// login button to ask players to sign-in. Clicking it should
// call GamesSignInClient.signIn().
}
});
Se o usuário opta por não fazer login quando o jogo é iniciado, você pode continuar
exibindo o botão com o ícone do Play Games e tentar fazer
login dele novamente chamando GamesSignInClient.signIn()
, se o usuário
pressionar o botão.
Depois de verificar se o usuário está conectado, você pode recuperar o ID do jogador para identificá-lo. Exemplo:
PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
// Get PlayerID with mTask.getResult().getPlayerId()
}
);
Migrar para o login nos serviços relacionados a jogos do Google Play v2
Esta seção 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:
- O login é acionado automaticamente quando o jogo é iniciado. Em vez de usar o
GoogleSignInClient
do SDK GoogleSignIn para fazer login, você pode usarGamesSignInClient.isAuthenticated()
para buscar o resultado da tentativa de login automático. - As classes do Client Factory não precisam mais que um objeto
GoogleSignInAccount
seja transmitido. Escopos OAuth adicionais não podem ser solicitados (GAMES_LITE
será solicitado automaticamente). - Os tokens de autenticação agora são fornecidos usando
GamesSignInClient.requestServerSideAccess()
no SDK dos serviços relacionados a jogos do Google Play. - 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 extras, a migração do caso de uso será simples.
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(). } });
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.
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()
.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() } );
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