Cómo integrar la API de Recall de PGS en tu juego

En esta página, se explica cómo implementar la API de Recall en tu juego. Primero, se habla el servidor de juegos y el cliente para que admitan la API y, luego, cómo almacenar y recuperar tokens.

Configuración del servidor de juegos

Configura tu servidor de juegos para que realice llamadas de la API de Recall a los servidores de Google.

Configura tu proyecto de los Servicios de juego de Play

Sigue las instrucciones que se indican en Cómo configurar los Servicios de juego de Google Play (si aún no lo hiciste).

Configura una cuenta de servicio para el juego

Sigue las instrucciones para crear una cuenta de servicio. Cuando las hayas completado, deberías tener un archivo JSON con las credenciales de la cuenta de servicio.

Descarga la biblioteca de Java del servidor para los Servicios de juego de Play

Descargar la última versión de google-api-services-games biblioteca y súbelo a tu servidor.

Prepara credenciales para las llamadas a la API de Recall

Consulta Preparación para crear una API delegada llamada para obtener más 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();

Configuración del cliente de juegos

Configura tu cliente de juegos para que recupere los IDs de sesión de recuperación que usa tu servidor para comunicarse con los servidores de Google.

SDK de Java

Configura el SDK de Java en tu cliente. y asegúrate de incluir com.google.android.gms:play-services-games-v2:19.0.0 y com.google.android.gms:play-services-tasks:18.0.2 o versiones posteriores en Gradle .

Para comunicarte con los servidores de Google con la información correcta, solicita una Recupera el ID de sesión del SDK cliente, que envías al servidor de tu juego:

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

Cómo usar la API de Recall en tu servidor de juegos

Después de configurar tu servidor y cliente, puedes enviar el recallSessionID desde tu cliente de juegos al servidor de juegos y seguir las instrucciones que se indican a continuación para comenzar a usar la API de Java y almacenar, recuperar o borrar de tokens de recuperación el servidor.

Cómo almacenar tokens

Almacena el arquetipo del usuario y el token de juego con el objeto LinkPersonaRequest. Utiliza el GoogleCredential para llamar a Google. APIs. Seguir la cardinalidad 1:1 restricción, puedes vincula solo un arquetipo a un perfil de los PGS a la vez y viceversa. Establece el de resolución de PGS en caso de que este perfil de los PGS ya se haya vinculado con otro persona.

También puedes establecer un TTL en el token, que declara durante cuánto tiempo el token es válido mediante un Durations . Puedes elegir configurar esto con SetTtl() (como se muestra a continuación), que establece la fecha de vencimiento a partir de la cantidad de tiempo especificada en el método setExpireTime(), que te permite establecer la hora exacta de vencimiento de los tokens.

Debes encriptar el arquetipo y el token del juego, y estos no pueden contener información de identificación personal. Las cadenas de arquetipos y de tokens pueden tener un máximo de 256 caracteres, y puede haber un máximo de 20 tokens o arquetipos almacenados por jugador y por juego.

Solo se puede almacenar un token por arquetipo y por jugador en un momento determinado. Si intentas para almacenar otro token con el mismo arquetipo, el sistema reemplaza el original token.

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
}

Cómo recuperar tokens

Para recuperar el token de recuperación, obtén el recallSessionId del cliente. y pasarla a la API de 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
}

Cómo borrar el token de recuperación

Si es necesario, también puedes borrar el token de recuperación con la siguiente llamada:

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

Habilitar el modo sin perfil

Puede habilitar la funcionalidad limitada de la API de Recall. Para los usuarios que no tienen perfiles de los PGS, sigue estos pasos:

  1. Habilita la recuperación sin perfil para tu proyecto de juego de los PGS en Play Developer de Cloud. Selecciona la opción etiquetada
  2. Revisa las condiciones adicionales que se describen más adelante en esta sección.
  3. Agrega la siguiente etiqueta de metadatos a tu aplicación manifiesto:
<meta-data
  android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
  android:value="true" />

Términos adicionales

Además de estar sujetos a las Condiciones de los Servicios de juego de Play de recuperación, aceptas que, si usas la API de Recall usuarios sin un perfil de los PGS, lo que permite compartir los datos del usuario final con Google sin un perfil de los Servicios de juego de Play Usted deberá, antes de compartir dichos datos con Google, debe proporcionar al usuario final aviso adecuado que describa 1) su uso compartido de los datos con Google para permitir Play Juegos la función de vinculación de cuentas, 2) la disponibilidad de parámetros de configuración para administrar como el uso compartido, como los que se realizan a través de la configuración de Play Juegos, y 3) el procesamiento de en virtud de la Política de Privacidad de Google de políticas y obtén la información de acceso para que se comparta de forma tal que satisfaga todos los requisitos legales aplicables.