Advertisement
  1. Code
  2. Android SDK

Comenzando Con los Servicios de Juegos de Google Play

Scroll to top
Read Time: 12 min

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

Las tecnologías de juegos están evolucionando constantemente. Sin embargo, muchos elementos nucleares de juego han permanecido sin cambio por décadas. Puntajes altos, tablas de posiciones, búsquedas, logros y soporte para multi-jugador son ejemplos. So estás desarrollando una juego para la plataforma Android, no tienes que implementar ninguno de esos elementos de manera manual. Puedes simplemente usar las APIs de servicios de juegos de Google Play en su lugar.

En este tutorial, te mostraré como crear un simple juego Android, agregarle servicios de juego de Google Play y usar las APIs de tablas de posiciones y logros.

Prerequisitos

Para poder seguir este tutorial, necesitas lo siguiente:

1. Crea un Juego Simple

No hay diversión en agregar las APIs de servicios de juegos de Play a un proyecto vacío de Android Studio. Así pues, creemos un juego en donde el usuario gana puntos simplemente dando clic a u botón. Más precisamente, el objetivo del juego será dar clic a un botón tan seguido como sea posible dentro de 60 segundos.

Paso 1: Crea el Diseño del Juego

La retícula del juego tendrá un widget Button, al que el usuario dará clic para ganar puntos y dos widgets TextView para mostrar el marcador y el tiempo restante. Si los pones todos dentro de un RelativeLayout y los centras tanto horizontal como verticalmente, deberías tener un archivo de retícula que se vea así:

1
<?xml version="1.0" encoding="utf-8"?>
2
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
3
    xmlns:tools="http://schemas.android.com/tools"
4
    android:id="@+id/activity_main"
5
    android:layout_width="match_parent"
6
    android:layout_height="match_parent"
7
    android:paddingBottom="@dimen/activity_vertical_margin"
8
    android:paddingLeft="@dimen/activity_horizontal_margin"
9
    android:paddingRight="@dimen/activity_horizontal_margin"
10
    android:paddingTop="@dimen/activity_vertical_margin"
11
    tools:context="com.tutsplus.mylittlegame.MainActivity">
12
13
    <Button
14
        android:text="Start"
15
        android:layout_width="wrap_content"
16
        android:layout_height="wrap_content"
17
        android:layout_centerVertical="true"
18
        android:layout_centerHorizontal="true"
19
        android:id="@+id/main_button" />
20
21
    <TextView
22
        android:text="Time remaining: 0 seconds"
23
        android:layout_width="wrap_content"
24
        android:layout_height="wrap_content"
25
        android:layout_below="@+id/main_button"
26
        android:layout_centerHorizontal="true"
27
        android:layout_marginTop="25dp"
28
        android:id="@+id/time_view" />
29
30
    <TextView
31
        android:text="Score: 0"
32
        android:layout_width="wrap_content"
33
        android:layout_height="wrap_content"
34
        android:layout_above="@+id/main_button"
35
        android:layout_marginBottom="28dp"
36
        android:layout_centerHorizontal="true"
37
        android:id="@+id/score_view" />
38
39
</RelativeLayout>

Nuestro juego tendrá una pantalla de tabla de posiciones y una pantalla de logros. Para permitir al usuario navegar a esas pantallas, agrega dos widgets Button más al final del archivo de retícula.

1
<Button
2
    android:text="Achievements"
3
    android:layout_width="wrap_content"
4
    android:layout_height="wrap_content"
5
    android:layout_alignParentTop="true"
6
    android:layout_alignParentLeft="true"
7
    android:id="@+id/achievements_button"
8
    android:onClick="showAchievements"
9
    />
10
11
<Button
12
    android:text="Leaderboard"
13
    android:layout_width="wrap_content"
14
    android:layout_height="wrap_content"
15
    android:layout_alignParentTop="true"
16
    android:layout_alignParentRight="true"
17
    android:id="@+id/leaderboard_button"
18
    android:onClick="showLeaderboard"/>

Nota que ambos botones tienen atributos onClick. Crearemos los métodos Java a los que se referirán en pasos futuros.

Paso 2: Implementa la Lógica de Juego

Dentro de la actividad, crea variables miembro para los widgets de juego que definimos en el archivo XML de retícula. Adicionalmente, crea una variable int para el marcador y una variable boolean para el estado del juego.

1
private Button mainButton;
2
private TextView scoreView;
3
private TextView timeView;
4
5
private int score = 0;
6
private boolean playing = false;

Inicializa los widgets dentro del método onCreate() de la actividad usando el método findViewById().

1
mainButton = (Button)findViewById(R.id.main_button);
2
scoreView = (TextView)findViewById(R.id.score_view);
3
timeView = (TextView)findViewById(R.id.time_view);

Para escuchar clics en el widget Button, crea y agrega un OnClickListener a este.

1
mainButton.setOnClickListener(new View.OnClickListener() {
2
    @Override
3
    public void onClick(View v) {
4
        // More code goes here

5
    }
6
});

Debemos implementar ahora los siguientes requerimientos:

  • La primera vez que el usuario de clic al botón, el juego debe comenzar.
  • Cada clic subsecuente debería incrementar la variable score.
  • El juego debe terminar cuando hayan pasado 60 segundos.

Podemos usar la variable playing para diferenciar entre el primer clic y los clics subsecuentes. Para llevar seguimiento del tiempo, podemos usar la clase abstracta CountDownTimer, la cuál es ideal para nuestros requerimientos. Tiene un método onTick() dentro, el cuál puede actualizar de manera precisa timeView para mostrar el número de segundos restantes. También tiene un método onFinish, el cuál es llamado cuando el contador ha terminado.

Por lo tanto, agrega el siguiente código en el método onClick():

1
if(!playing) {
2
    // The first click

3
    playing = true;
4
    mainButton.setText("Keep Clicking");
5
6
    // Initialize CountDownTimer to 60 seconds

7
    new CountDownTimer(60000, 1000) {
8
        @Override
9
        public void onTick(long millisUntilFinished) {
10
            timeView.setText("Time remaining: " + millisUntilFinished/1000);
11
        }
12
13
        @Override
14
        public void onFinish() {
15
            playing = false;
16
            timeView.setText("Game over");
17
            mainButton.setVisibility(View.GONE);
18
        }
19
    }.start();  // Start the timer

20
} else {
21
    // Subsequent clicks

22
    score++;
23
    scoreView.setText("Score: " + score + " points");
24
}

En este punto, puedes ejecutar el proyecto para jugar el juego.

Game interfaceGame interfaceGame interface

2. Agrega Dependencias de Servicios de Juegos

Configurar un proyecto para usar las APIs de servicios de juegos de Play involucra muchos pasos. Usando el Asistente Firebase de Android Studio, puedes automatizarlos.

Abre la ventana del asistente yendo a Herramientas > Firebase. Después, en la sección de Analytics, da clic en el enlace Log an Analytics event. Ahora puedes conectar tu proyecto de Android Studio a un proyecto Firebase dando clic al botón Conectar a Firebase. Asegúrate de que eliges la opción Crear nuevo proyecto Firebase en el diálogo que emerge.

Connect to Firebase dialogConnect to Firebase dialogConnect to Firebase dialog

Una vez que la conexión ha sido establecida, presiona el botón Add Analytics to your app para agregar todos los cambios requeridos a los archivos build.gradle.

Debes agregar la dependencia para los servicios de juegos de Play manualmente. Así pues, ve al archivo build.gradle del módulo app y agrega la siguiente dependencia compile:

1
compile 'com.google.android.gms:play-services-games:9.8.0'

También, las APIs de servicios de juegos necesitan un archivo de configuración XML. Crea uno llamado games-ids.xml dentro de la carpeta res/values. Agregaremos contenido a este en un paso futuro.

3. Registra el Juego

Todos los juegos que usan servicios de juegos de Google Play deben registrarse en la consola de desarrollador de Play. Tendrás que pagar una cuota única de registro de $25 para poder acceder a la consola.

En la consola, da clic al icono del gamepad para abrir la pantalla de Servicios de Juegos.

Game services screenGame services screenGame services screen

Después, da clic en el botón Configurar servicios de juegos de Google Play para comenzar a registrar el juego.

En el diálogo que emerge, elige la segunda pestaña porque nuestro juego ya está usando Google APIs. Debes poder ver ahora el nombre de tu proyecto de Firebase en la lista de proyectos disponibles. Después de seleccionarlo, elige una categoría para el juego. Por ahora, puedes ir a la categoría de Casual.

Choose your console projectChoose your console projectChoose your console project

Después de que presiones Continuar, puedes enlazar Firebase Analytics y servicios de juegos Play dando clic al botón Enlazar Firebase.

Después, ve a la sección de Apps Enlazadas para enlazar tu proyecto de Android Studio con la consola de desarrollador de Play. En el diálogo que emerge, presiona el botón Android y teclea el nombre de paquete de tu proyecto en el campo Nombre de Paquete.

Link an Android app screenLink an Android app screenLink an Android app screen

Presiona el botón Guardar y continuar para generar un ID de cliente para tu juego.

Client ID display screenClient ID display screenClient ID display screen

Nuestro juego ahora ha sido registrado exitosamente con la consola de desarrollador Google Play.

4. Agrega un Usuario de Prueba

Los servicios de juegos Play funcionarán solo si tu juego es publicado en Google Play. Sin embargo, para permitirte probar tu juego, la consola de desarrollador te permite asociar unas cuantas cuentas de usuario de prueba. Yendo a la sección Testing, puedes agregar o quitar cuentas de usuario de prueba. Asegúrate de que agregas la cuenta de Google que usas en tu teléfono o emulador aquí.

Testing access screenTesting access screenTesting access screen

5. Crea una Tabla de Posiciones

Una tabla de posiciones no es nada más que una pantalla que muestra las puntuaciones altas de los usuarios. Las tablas de posiciones de servicios de juegos de Play permite a los usuarios ver sus altas puntuaciones diarias, semanales y de todo el tiempo.

Crear una tabla de posiciones en la consola de desarrollador Play toma solo unos cuantos clics. Ve a la sección de Tabla de posiciones y presiona el botón Agregar tabla de posiciones. En la siguiente pantalla, da un nombre significativo a la tabla de posiciones y presiona el botón Guardar.

Leaderboard creation screenLeaderboard creation screenLeaderboard creation screen

Nuestra tabla de posiciones está ahora lista.

6. Crea un Logro

Los logros son premios dentro del juego que los usuarios obtienen por lograr hacer algo especial. Un juego que tiene muchos logros para desbloquear es usualmente más divertido que uno que no los tiene. Consecuentemente, la mayoría de los juegos populares en Google Play hoy en día tienen docenas, sino cientos de logros.

En este tutorial, agregaremos un solo logro a nuestro juego. Su nombre será Lightning Fast y será desbloqueado cuando los usuarios logren tocar el botón más de 100 veces en un minuto. Para crear el logro, ve a la sección Logros y presiona el botón Agregar logro. Después de que tecleas el nombre y la descripción del logro, presiona el botón Guardar.

Achievement creation screenAchievement creation screenAchievement creation screen

7. Actualiza la Configuración XML del Juego

Tanto la tabla de posiciones como el logro tienen identificadores únicos. Debemos agregar ahora esos identificadores a nuestro proyecto de Android Studio junto con el ID de aplicación que fue generado durante el registro. También puedes hacerlo manualmente actualizando el archivo games-ids.xml que creamos anteriormente. Sin embargo, sugiero que uses el código de configuración automáticamente generado disponible en la consola de desarrollador.

Para obtener el código de configuración auto-generado, puedes ir ya sea a la sección Logros o Tabla de posiciones y presionar el enlace Obtener recursos. Verás código XML que luce así:

1
<?xml version="1.0" encoding="utf-8"?>
2
<!--

3
Google Play game services IDs.

4
Save this file as res/values/games-ids.xml in your project.

5
-->
6
<resources>
7
    <string name="app_id">1234567890</string>
8
    <string name="package_name">com.tutsplus.mylittlegame</string>
9
    <string name="achievement_lightning_fast">HzkA4Kz04F8MRYIAze</string>
10
    <string name="leaderboard_my_little_leaderboard">HzkA4Kz04F8MRYIBVU</string>
11
</resources>

Copia todo el código y pégalo en el archivo games-ids.xml de tu archivo.

8. Conecta a Servicios de Juegos de Play

Antes de usar las APIs de Tablas de posiciones y logros, debemos crear una instancia de GoogleApiClient y conectala a servicios de juegos de Play. De ahí, agrega un objeto GoogleApiClient como una variable miembro de tu actividad.

Debemos usar la clase GoogleApiClient.Builder para construir la instancia GoogleApiClient. Mientras construimos el cliente, podemos especificar la API y su alcance en los que estamos interesados usando los métodos addApi() y addScope().

Adicionalmente, sugiero que llames al método enableAutoManage() para asegurar que el cliente administra automáticamente la conexión a los servicios de juegos. El método, sin embargo, necesita un OnConnectionFailedListener, el cuál será llamado cuando la conexión falla. Por ahora, simplemente llamaremos el método finish() para cerrar la app en caso de falla de conexión.

En consecuencia, agrega el siguiente código al inicio del método onCreate():

1
apiClient = new GoogleApiClient.Builder(this)
2
        .addApi(Games.API)
3
        .addScope(Games.SCOPE_GAMES)
4
        .enableAutoManage(this, new GoogleApiClient.OnConnectionFailedListener() {
5
    @Override
6
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
7
        Log.e(TAG, "Could not connect to Play games services");
8
        finish();
9
    }
10
}).build();

Si ejecutas la app ahora, se te pedirá crear un Gamer ID para ti mismo. Teclea un Gamer ID de tu elección y presiona el botón Ingresar.

Sign in to Play Games dialogSign in to Play Games dialogSign in to Play Games dialog

9. Usa la Tabla de posiciones

Enviar un marcador a la tabla de posiciones toma solo una línea de código. Todo lo que necesitas hacer es llamar el método submitScore() de la clase Games.Leaderboards. Como sus argumentos, espera la instancia GoogleApiClient, el ID de la tabla de posiciones y el marcador.

En nuestro juego, debemos enviar el marcador al final de los 60 segundos. Así pues, agrega el siguiente código al método onFinish():

1
Games.Leaderboards.submitScore(apiClient,
2
        getString(R.string.leaderboard_my_little_leaderboard),
3
        score);

Para ver la tabla de posiciones, debemos comenzar una nueva actividad con un intent de tabla de posiciones. Para recoger el intent de la tabla de posiciones, llama al método getLeaderboardIntent() de la clase Games.Leaderboards y pasa la instancia GoogleApiClient y el ID de la tabla de posiciones.

La retícula de nuestro juego ya tiene un botón que puede ser presionada para abrir la tabla de posiciones. El valor de su atributo onClick es showLeaderboard. De ahí, agrega el siguiente código a tu actividad:

1
public void showLeaderboard(View v) {
2
    startActivityForResult(
3
      Games.Leaderboards.getLeaderboardIntent(apiClient,
4
        getString(R.string.leaderboard_my_little_leaderboard)), 0);
5
}

Puedes correr la app ahora y jugar el juego de nuevo. Esta vez, cuando el juego termina, tu marcador será enviado a la tabla de posiciones. Aquí está cómo luce la tabla de posiciones por defecto:

Leaderboard windowLeaderboard windowLeaderboard window

10. Usa el Logro

Llamando al método unlock() de la clase Games.Achievements, puedes desbloquear cualquier logro. El método espera la instancia de GoogleApiClient y el ID del logro como sus únicos argumentos.

El logro Lightning Fast que definimos en la consola debe ser desbloqueado cuando la puntuación del usuario cruza los 100 puntos. Así pues, justo después del código para incrementar la puntuación, agrega el siguiente código:

1
if(score>100) {
2
    Games.Achievements
3
         .unlock(apiClient, 
4
            getString(R.string.achievement_lightning_fast));
5
}

El código necesario para mostrar las pantallas de logros es muy similar a la que escribimos para mostrar la pantalla de tabla de posiciones. Todo lo que necesitas hacer es asar el valor de retorno del método getAchievementsIntent() al método startActivityForResult().

1
public void showAchievements(View v) {
2
    startActivityForResult(
3
        Games.Achievements
4
             .getAchievementsIntent(apiClient),
5
        1
6
    );
7
}

Si corres la aplicación y juegas de nuevo, verás un logro emergente cuando tu puntuación pasa los 100 puntos por primera vez.

Achievement pop upAchievement pop upAchievement pop up

Conclusión

Ahora sabes como usar las APIs de servicios de juegos de Google Play en tu proyecto de Android Studio. Los servicios de juegos de Play no están limitados a la plataforma Android. Estos pueden ser usados tan fácilmente tanto para la web como para iOS también. Así que los servicios de juegos te permiten crear juegos multi-plataforma y ofrecer experiencias de juego consistentes a los usuarios en múltiples plataformas.

Para aprender más acerca de las APIs de servicios de juegos de Google Play, puedes referirte a sus guías oficiales o, incluso mejor, ¡revisar algunos de nuestros tutoriales aquí en Envato Tuts+!


Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.