Cómo migrar a la versión 2 de acceso de los Servicios de juego de Play

En esta guía, se describe cómo migrar tu código de cliente desde los Servicios de juego de Play de v1 a v2.

El nuevo SDK contiene cuatro cambios importantes que debes tener en cuenta para mejorar el acceso:

  1. El acceso se activa automáticamente cuando se inicia el juego. En lugar de con el GoogleSignInClient del SDK de GoogleSignIn para realizar el acceso, puedes usar GamesSignInClient.isAuthenticated() para recuperar el resultado de la configuración intento de acceso.
  2. Las clases de fábrica del cliente ya no necesitarán un objeto GoogleSignInAccount pasado. No se pueden solicitar permisos de OAuth adicionales (se GAMES_LITE se solicitan automáticamente).
  3. Los tokens de autenticación ahora se proporcionan usando GamesSignInClient.requestServerSideAccess() en los Servicios de juego de Play de Google Cloud.
  4. Se quitó el método de salida y ya no se requerirá una conexión en el juego para acceder a los Servicios de juego de Play o salir de ellos.

Además, tu juego tendrá accesos adicionales debido a cuando se inicie el juego. Por lo tanto, debes revisar tu administración de cuotas, para garantizar que tu juego no supere la cuota de solicitudes de acceso.

Segmenta el nuevo repositorio de Maven del SDK

Si usas el sistema de compilación de Gradle, puedes hacerlo cambiando tu dependencia al artefacto com.google.android.gms:play-services-games-v2:+ en el archivo build.gradle de tu módulo. Por ejemplo:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

Inicializa el SDK

Inicializa el SDK de Play Juegos en la devolución de llamada onCreate(..) de tu clase Application. Por ejemplo:

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

Quita las llamadas de acceso y salida

Si no especificas permisos adicionales, la migración de tu caso de uso debería ser sencilla.

  1. Quita las llamadas de acceso con la API de GoogleSignIn. El acceso siempre se realizará cuando se inicie el juego. En su lugar, escucha el resultado del intento de acceso automático con 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. Quita todas las llamadas para salir, ya que la administración de la cuenta ahora se encuentra dentro del SO y de la configuración de la app de Play Juegos.

  3. Si el jugador accedió de forma correcta, quita el botón de acceso de Play Juegos de tu juego. Si el usuario decide no acceder cuando se inicia el juego, puedes elegir, de manera opcional, continuar mostrando un botón con el ícono de Play Juegos y activar el proceso de acceso con GamesSignInClient.signIn().

  4. Después de verificar que el usuario accedió, puedes recuperar el ID de jugador para identificarlo.

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
  5. Quita tu dependencia de la API de GoogleSignIn si ya no la usas.

Actualiza los nombres de clases de cliente

Cuando crees clientes (p. ej., LeaderboardsClient o AchievementsClient), usa PlayGames.getFooClient() en lugar de Games.getFooClient().

Solicita acceso al servidor

Cuando solicites acceso al servidor, usa GamesSignInClient.requestServerSideAccess() en lugar 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 with the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

Quita permisos adicionales

Con la versión 2 de los Servicios de juego de Play, no podrás solicitar ningún permiso adicional. Si, de todos modos, necesitas solicitar permisos adicionales, te recomendamos que uses el SDK de Acceso con Google junto con los Servicios de juego de Play.

Migración desde GoogleApiClient

En el caso de las integraciones existentes, es posible que tu juego dependa de la variante de API de GoogleApiClient del SDK de los Servicios de juego de Play. Este era obsoleto a finales de 2017 y se reemplaza por "sin conexión" clientes. Para migrar, puedes reemplazar la clase GoogleApiClient por un equivalente "sin conexión". Luego, también deberás debes seguir las instrucciones de esta página para migrar tu juego de la versión 1 a la 2. A continuación, se muestra una asignación de clases comunes:

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