Integrar a API Recall do PGS ao jogo

Esta página explica como implementar a API Recall no seu jogo. Primeiro, vamos abordar configurando o servidor de jogos e o cliente para que sejam compatíveis com a API e, em seguida, realiza como armazenar e recuperar tokens.

Configuração do servidor de jogos

Configure o servidor de jogos para fazer chamadas da API Recall para os servidores do Google.

Configurar seu projeto dos serviços relacionados a jogos do Google Play

Siga as instruções em Como configurar os serviços relacionados a jogos do Google Play, caso ainda não tenha feito isso.

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.

Fazer o download da biblioteca Java do lado do servidor para os serviços relacionados a jogos do Google Play

Faça o download do google-api-services-games mais recente biblioteca e fazer o upload para seu servidor.

Preparar credenciais para chamadas da API Recall

Consulte Como se preparar para criar uma API delegada Ligar 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 mais recente no Gradle .

Para se comunicar com os servidores do Google com as informações corretas, solicite uma Recupere o ID da sessão do SDK do cliente, que você envia 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
  });

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

Armazene o perfil do usuário e o token do jogo usando o objeto LinkPersonaRequest. Use o GoogleCredential para ligar para o Google APIs. Para seguir a cardinalidade 1:1 restrição, é possível vincule apenas um perfil a um perfil dos Serviços relacionados a jogos do Google Play por vez e vice-versa. Defina o política de resolução caso este perfil dos Serviços relacionados a jogos do Google Play já tenha sido vinculado a outro perfil.

Opcionalmente, você pode optar por definir um TTL no token, que declara quanto tempo o token é válido usando um Durations objeto. Você pode definir isso usando SetTtl() (como mostrado abaixo), que define a data de validade do período especificado no método ou setExpireTime(), que permite definir a hora exata de expiração dos tokens.

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 e podem haver no máximo 20 perfis ou tokens armazenados por jogador em cada jogo.

Somente um token pode ser armazenado por perfil e por jogador em um determinado momento. Se você tentar para armazenar outro token com o mesmo perfil, o sistema com base no token correto anterior.

import com.google.api.services.games.Games.Recall.LinkPersona;
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

Para extrair o token de recuperação, acesse o recallSessionId do cliente e transmiti-lo para a API retrieveTokens:

import com.google.api.services.games.Games.Recall.RetrieveTokens;

// ...

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
}

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.Recall.UnlinkPersona;

// ...

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();

// Confirm that the unlinking process completed successfully.
boolean unlinked = unlinkPersonaResponse.isUnlinked();

Ativar o modo sem perfil

É possível ativar a funcionalidade limitada da API Recall para usuários que não têm perfis dos Serviços relacionados a jogos do Google Play:

  1. Ativar o recall sem perfil para seu projeto de jogo dos serviços relacionados a jogos do Google Play (PGS, na sigla em inglês) no Google Play Developer do Cloud. Selecione a opção rotulada
  2. Consulte os termos adicionais descritos mais adiante nesta seção.
  3. Adicione a seguinte tag de metadados ao seu aplicativo manifesto do app:
<meta-data
  android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
  android:value="true" />

Termos adicionais

Além de estarem sujeitos aos Termos dos serviços relacionados a jogos do Google Play Service, você concorda que, se usar a API Recall para sem um perfil dos Serviços relacionados a jogos do Google Play, o que permite o compartilhamento dados do usuário final com o Google sem que ele tenha um perfil dos serviços relacionados a jogos do Google Play; antes de compartilhar esses dados com o Google, forneça ao usuário final aviso adequado descrevendo 1) seu compartilhamento dos dados com o Google para ativar Play Games 2) a disponibilidade de configurações para gerenciar compartilhamento, como os nas configurações do Play Games, e 3) o processamento do esses dados de acordo com a Política de Privacidade do Google, política e conseguir informações de usuários finais consentimento para esse compartilhamento que atenda a todos os requisitos legais aplicáveis.