Logros en juegos para Android

En esta guía, se muestra cómo usar las API de logros en una aplicación para Android a fin de desbloquear y mostrar logros en el juego. Se pueden encontrar las API en los paquetes com.google.android.gms.games y com.google.android.gms.games.achievements.

Antes de comenzar

Si aún no lo hiciste, puede resultarte útil consultar los conceptos de juegos de logros.

Antes de comenzar a programar con la API de logros, haz lo siguiente:

Obtén un cliente de logros

Para comenzar a usar la API de logros, primero el juego debe obtener un objeto AchievementsClient. Para ello, llama al método Games.getAchievementClient() y pasa la actividad y el GoogleSignInAccount del jugador actual. Para obtener información sobre cómo recuperar la información de la cuenta del jugador, consulta Acceso en juegos para Android.

Cómo desbloquear logros

Para desbloquear un logro, llama al método AchievementsClient.unlock() y pasa el ID del logro.

En el siguiente fragmento de código, se muestra cómo tu app puede desbloquear logros:

Games.getAchievementsClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .unlock(getString(R.string.my_achievement_id));

Si el logro es de tipo incremental (es decir, se requieren varios pasos para desbloquearlo), llama a AchievementsClient.increment() en su lugar.

En el siguiente fragmento de código, se muestra cómo la app puede aumentar los logros del jugador:

Games.getAchievementsClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .increment(getString(R.string.my_achievement_id), 1);

No es necesario que escribas código adicional a fin de desbloquear el logro; los Servicios de juego de Google Play lo desbloquearán automáticamente cuando alcance la cantidad de pasos necesarios.

Una práctica recomendada consiste en definir el ID de los logros en el archivo strings.xml, de modo que el juego pueda hacer referencia a los logros por ID de recurso. Cuando realices llamadas para actualizar y cargar logros, asegúrate de seguir también estas prácticas recomendadas a fin de evitar exceder tu cuota de API.

Cómo mostrar los logros

Si deseas mostrar los logros de un jugador, llama a AchievementsClient.getAchievementsIntent() a fin de obtener un Intent para crear la interfaz de usuario de logros predeterminada. Para que pueda abrir la IU, el juego podrá llamar a startActivityForResult.

En el siguiente fragmento de código, se muestra la manera en que tu app puede mostrar la interfaz de usuario de logros predeterminada. En el fragmento, RC_ACHIEVEMENT_UI es un número entero arbitrario que el juego usa como código de solicitud.

private static final int RC_ACHIEVEMENT_UI = 9003;

private void showAchievements() {
  Games.getAchievementsClient(this, GoogleSignIn.getLastSignedInAccount(this))
      .getAchievementsIntent()
      .addOnSuccessListener(new OnSuccessListener<Intent>() {
        @Override
        public void onSuccess(Intent intent) {
          startActivityForResult(intent, RC_ACHIEVEMENT_UI);
        }
      });
}

A continuación, se muestra un ejemplo de la IU predeterminada de logros.