Esta página explica como implementar a API Recall no seu jogo. Primeiro, vamos abordar a configuração do servidor de jogos e do cliente para oferecer suporte à API. Em seguida, vamos mostrar como armazenar e extrair tokens.
Configuração do servidor de jogos
Configure o servidor de jogos para fazer chamadas da API Recall para os servidores do Google.
1. Configurar seu projeto dos serviços relacionados a jogos do Google Play
Siga as instruções em Configurar os serviços relacionados a jogos do Google Play, caso ainda não tenha feito isso.
2. Configurar uma conta de serviço para o jogo
Siga as instruções para criar uma conta de serviço. No final, você terá um arquivo JSON com as credenciais da conta de serviço.
3. Fazer o download da biblioteca Java do lado do servidor para PlayGamesServices
Faça o download da biblioteca google-api-services-games mais recente e faça upload dela para seu servidor.
4. Preparar credenciais para chamadas da API Recall
Consulte Como se preparar para fazer uma chamada de API autorizada para mais contexto.
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.services.games.Games;
import com.google.api.services.games.GamesScopes;
// ...
GoogleCredential credential =
GoogleCredential.fromStream(new FileInputStream("<credentials>.json"))
.createScoped(Collections.singleton(GamesScopes.ANDROIDPUBLISHER));
Games gamesApi =
new Games.Builder(httpTransport, JSON_FACTORY, credential).build();
Configuração do cliente do jogo
Configure o cliente do jogo para extrair os IDs de sessão de recuperação usados pelo servidor para se comunicar com os servidores do Google.
SDK do Java
Configure o SDK do Java no seu cliente e inclua com.google.android.gms:play-services-games-v2:19.0.0.
e com.google.android.gms:play-services-tasks:18.0.2 ou versões mais recentes no
arquivo do Gradle.
Para se comunicar com os servidores do Google com as informações corretas, solicite um ID de sessão de recuperação do SDK do cliente, que você vai enviar ao servidor do jogo.
Kotlin
PlayGames.getRecallClient(getActivity())
.requestRecallAccess()
.addOnSuccessListener { recallAccess -> val recallSessionId: String = recallAccess.getSessionId() }
// Send the recallSessionId to your game server
Java
PlayGames.getRecallClient(getActivity())
.requestRecallAccess()
.addOnSuccessListener(
recallAccess -> {
String recallSessionId = recallAccess.getSessionId();
// Send the recallSessionId to your game server
});
SDK do Unity
Configure o SDK do Unity no seu cliente, caso ainda não tenha feito isso.
Para se comunicar com os servidores do Google com as informações corretas, solicite um ID de sessão de recuperação do SDK do cliente e a envie ao servidor do jogo.
PlayGamesPlatform.Instance.RequestRecallAccess(
recallAccess => {
string recallSessionId = recallAccess.sessionId;
// Send the recallSessionId to your game server
});
Usar a API Recall no servidor do jogo
Depois de configurar o servidor e o cliente, é possível enviar o recallSessionID
do cliente do jogo para o servidor do seu jogo e seguir as orientações abaixo para
começar a usar a API Java para armazenar, extrair ou excluir os tokens de recuperação
do lado do servidor.
Armazenar tokens
Uma conta de jogador na API Google Play Games Recall consiste em duas informações:
- um perfil do jogador que serve como um identificador estável para uma conta no jogo;
- um token que serve como chave para fazer login com segurança na conta de um jogador;
É possível armazenar o perfil e o token de um usuário usando o objeto
LinkPersonaRequest. Use o GoogleCredential para chamar as APIs do Google. Consulte Como chamar APIs
do Google para mais contexto. Um perfil de jogador tem uma restrição de cardinalidade 1:1: um único perfil do PGS só pode conter um único perfil de jogador, e um perfil de jogador só pode existir em um único perfil do PGS. Defina a política de resolução de links conflitantes para definir como as violações da restrição de cardinalidade 1:1 devem ser resolvidas.
Defina o prazo de validade do token, se quiser. Use SetTtl() com um objeto
Durations para definir um TTL ou fornecer um tempo de expiração
exato com setExpireTime().
Você precisa criptografar o perfil e o token do jogo, e eles não podem conter informações de identificação pessoal. As strings de perfis e tokens podem ter no máximo 256 caracteres.
import com.google.api.services.games.Games.Recall.LinkPersona;
import com.google.api.services.games.model.LinkPersonaRequest;
import com.google.api.services.games.model.LinkPersonaResponse;
import com.google.protobuf.util.Durations;
// ...
Games gamesApi =
new Games.Builder(httpTransport, JSON_FACTORY, credential).build();
String recallSessionId = ... // recallSessionID from game client
String persona = ... // encrypted opaque string, stable for in-game account
String token = ... // encrypted opaque string encoding the progress line
LinkPersonaRequest linkPersonaRequest =
LinkPersonaRequest.newBuilder()
.setSessionId(recallSessionId)
.setPersona(persona)
.setToken(token)
.setCardinalityConstraint(ONE_PERSONA_TO_ONE_PLAYER)
.setConflictingLinksResolutionPolicy(CREATE_NEW_LINK)
.setTtl(Durations.fromDays(7)) // Optionally set TTL for token
.build();
LinkPersonaResponse linkPersonaResponse =
gamesApi.recall().linkPersona(linkPersonaRequest).execute();
if (linkPersonaResponse.getState() == LINK_CREATED) {
// success
}
Extrair tokens
Há três opções para extrair um token, com base nas necessidades dos seus jogos. É possível solicitar o seguinte:
- Os tokens associados ao jogo atual, incluindo tokens de recall no escopo do jogo.
- O último token armazenado em todos os jogos da conta de desenvolvedor.
- Considerando uma lista de jogos da conta de desenvolvedor, todos os tokens de recall associados a cada jogo.
Tokens de recuperação no escopo do jogo
Para recuperar os tokens de recuperação do jogo atual, extraia o recallSessionId
do cliente e transmita para a API retrieveTokens:
import com.google.api.services.games.Games;
import com.google.api.services.games.model.RetrievePlayerTokensResponse;
import com.google.api.services.games.model.RecallToken;
// ...
String recallSessionId = ... // recallSessionID from game client
RetrievePlayerTokensResponse retrievePlayerTokensResponse =
gamesApi.recall().retrieveTokens(recallSessionId).execute();
for (RecallToken recallToken : retrievePlayerTokensResponse.getTokens()) {
String token recallToken.getToken();
// Same string as was written in LinkPersona call
// decrypt and recover in-game account
}
Token de recuperação mais recente em todos os jogos da conta de desenvolvedor
Para recuperar o token mais recente armazenado em todos os jogos da conta de desenvolvedor
no Google Play Console, é necessário extrair o recallSessionId do
cliente e transmiti-lo para a API lastTokenFromAllDeveloperGames, conforme mostrado
no snippet de código a seguir. Como parte da resposta, você pode inspecionar o ID do aplicativo associado a esse token.
import com.google.api.services.games.Games;
import com.google.api.services.games.model.RetrieveDeveloperGamesLastPlayerTokenResponse;
import com.google.api.services.games.model.GamePlayerToken;
import com.google.api.services.games.model.RecallToken;
// ...
String recallSessionId = ... // recallSessionID from game client
RetrieveDeveloperGamesLastPlayerTokenResponse response =
gamesApi.recall().lastTokenFromAllDeveloperGames(recallSessionId)
.execute();
if (response.hasGamePlayerToken()) {
GamePlayerToken gamePlayerToken = response.getGamePlayerToken();
// The ID of the application that the token is associated with.
String applicationId = gamePlayerToken.getApplicationId();
// Same string as was written in LinkPersona call.
RecallToken recallToken = gamePlayerToken.getRecallToken();
// Decrypt and recover in-game account.
}
Todos os tokens de recall em uma determinada lista de jogos pertencentes à conta de desenvolvedor
Para recuperar todos os tokens associados a uma lista de jogos pertencentes à
sua conta de desenvolvedor no Google Play Console, receba o recallSessionId
do cliente e transmita para a API gamesPlayerTokens. Forneça uma lista de IDs de aplicativos.
import com.google.api.services.games.Games;
import com.google.api.services.games.model.RetrieveGamesPlayerTokensResponse;
import com.google.api.services.games.model.GamePlayerToken;
import com.google.api.services.games.model.RecallToken;
// ...
String recallSessionId = ... // recallSessionID from game client
// Application IDs for which you would like to retrieve the recall tokens.
List<String> applicationIds = ...
RetrieveGamesPlayerTokensResponse response =
gamesApiClient
.recall()
.gamesPlayerTokens(recallSessionId)
.setApplicationIds(applicationIds)
.execute();
for (GamePlayerToken gamePlayerToken : response.getGamePlayerTokens()) {
// The ID of the application that the token is associated with.
String applicationId = gamePlayerToken.getApplicationId();
// Same string as was written in LinkPersona call.
RecallToken recallToken = gamePlayerToken.getRecallToken();
// Decrypt and recover in-game account.
}
Excluir token de recuperação
Se necessário, também é possível excluir o token de recuperação com esta chamada:
import com.google.api.services.games.Games;
import com.google.api.services.games.model.UnlinkPersonaRequest;
import com.google.api.services.games.model.UnlinkPersonaResponse;
// ...
String recallSessionId = ...
String persona = ...
String token = ...
Games gamesApi =
new Games.Builder(httpTransport, JSON_FACTORY, credential).build();
UnlinkPersonaRequest unlinkPersonaRequest =
UnlinkPersonaRequest.newBuilder()
.setSessionId(recallSessionId)
.setPersona(persona)
// .setToken(token) - alternatively set token, but not both
.build();
UnlinkPersonaResponse unlinkPersonaResponse =
gamesApi.recall().unlinkPersona(unlinkPersonaRequest).execute();
boolean unlinked = unlinkPersonaResponse.isUnlinked();
Ativar o modo sem perfil
Para ativar a funcionalidade limitada da API Recall para usuários que não têm perfis do PGS, siga estas etapas:
- Ative o recall sem perfil para seu projeto de jogo dos Serviços relacionados a jogos do Google Play no Play Developer
Console.

- Analise os termos adicionais descritos mais adiante nesta seção.
- Adicione a seguinte tag de metadados ao manifesto do app:
<meta-data
android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
android:value="true" />
Termos adicionais
Além de estar sujeito aos Termos de Serviço do Play Games Services, você concorda que, se usar a API Recall para usuários sem um perfil do PGS, o que permite compartilhar dados do usuário final com o Google sem que ele tenha um perfil do Play Games Services, você precisa, antes de compartilhar esses dados com o Google, fornecer ao usuário final um aviso adequado descrevendo o seguinte:
- Seu compartilhamento de dados com o Google para ativar o recurso de vinculação de contas do Play Games.
- A disponibilidade de configurações para gerenciar esse compartilhamento, como as configurações do Play Games.
- O tratamento desses dados de acordo com a Política de Privacidade do Google e receber o consentimento adequado do usuário final para esse compartilhamento, que atenda a todos os requisitos legais aplicáveis.