Advertisement
  1. Code
  2. Android SDK

Servicios de Juegos de Google Play: Creando Eventos y Búsquedas

Scroll to top
Read Time: 10 min

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

El alto valor de repetición es una de las características definitorias de un juego grandioso. Incluso los juegos con tramas muy simples pueden volverse exitosos en Google Play siempre y cuando tengan un valor alto de repetición. Si eres un jugador ávido, probablemente ya sabes que es el valor de repetición. Si no, puedes pensarlo como la probabilidad de que un usuario vaya a volver a jugar el juego incluso después de haber logrado el objetivo primario.

Usando las APIs de eventos y búsquedas, las cuáles son un subconjunto de las APIs de los servicios de juego de Google Play, puedes incrementar dramáticamente los valores de repetición de tus juegos, sin mencionar hacerlos más retadores y divertidos. En este tutorial, te mostraré cómo sacar lo mejor de ambas APIs.

Antes de que procedas, te sugiero que leas mi tutorial introductorio acerca de los servicios de juegos de Google Play el cuál te muestra cómo usar los servicios en un proyecto de Android Studio.

1. Entendiendo los Eventos y Búsquedas

Cualquier cosa que pase en un juego puede ser considerado un evento. Al registrar eventos suficientes usando la API de eventos, puedes analizar de cerca los comportamientos de tus usuarios. Puedes inferir detalles tales como que tan lejos pueden llegar los usuarios en tu juego, cuántos enemigos matan y cuántos recursos del juego recolectan. Con tales detalles a la mano, podrás refinar fácilmente tu juego para hacerlo más disfrutable.

La API de eventos, sin embargo, rara vez se usa sola. La mayoría de los desarrolladores la usan junto con la API de búsquedas para crear búsquedas. Una búsqueda, como su nombre sugiere, es un objetivo secundario que los usuarios pueden lograr para ganar alguna recompensa. Por ejemplo, si estás creando un juego en donde el usuario está tratando de salvar a una princesa, puedes agregar una búsqueda en donde el usuario debe encontrar al menos 100 anillos para ella.

Si no lo has adivinado aún, los eventos son usados para definir el criterio de terminación de búsquedas. En el ejemplo de arriba, encontrar un anillo sería un evento que debería ocurrir 100 veces para que la búsqueda se marque como completa.

Aunque las búsquedas comparten similitudes con los logros, hay unas cuantas diferencias importantes entre ambas:

  • No necesitas escribir ningún código para agregar una nueva búsqueda a tu juego, ya que los eventos de los que depende ya son parte del juego.
  • Las búsquedas están atadas al tiempo. Por ejemplo, puedes programar una nueva búsqueda para que comience una semana antes de Navidad y retar a los usuarios a completarla antes de Noche Buena.
  • Un usuario puede completar una búsqueda después de haber elegido participar en ella.

Con muchas búsquedas interesantes, algunas de las cuáles están programadas para repetirse cada semana o mes, puedes hacer sin esfuerzo que los usuarios jueguen tu juego varias veces.

2. Creando un Evento

Inicia sesión en la consola de desarrollador Play y abre la pantalla de Servicios de Juegos dando clic en el icono del control.

Después, elige el juego al que quieres agregar eventos y abre la sección de Eventos.

Presiona el botón Agregar evento para comenzar a crear un evento. En el formulario que emerge, dale un nombre significativo al evento. Continuando con el ejemplo del paso anterior, llamaré al evento Collect Ring.

Create event dialogCreate event dialogCreate event dialog

Una vez que presionas el botón Guardar, podrás ver el ID del evento. Para poder usar el evento en tu proyecto de Android Studio, debes agregar el ID como una nueva etiqueta <string> en el archivo games-ids.xml.

1
<string name="event_collect_ring">ABCDEFabcdef123</string>

3. Creando una Búsqueda

Crear una búsqueda es ligeramente más enmarañado. Comienza yendo a la sección Búsquedas y presionando el botón Agregar búsqueda. Dale un nombre atractivo a la búsqueda y una descripción fácil de entender. Ambos son importantes porque serán leídos por los usuarios. Una búsqueda que no parece interesante es poco probable que tenga muchos participantes.

Name and description of questName and description of questName and description of quest

Después, deslizate hacia abajo a la sección Criterio de terminación. En el campo Encontrar un evento, teclea el ID del evento que creaste anteriormente. En el siguiente campo de entrada, debes especificar cuántas veces debe ocurrir el evento para que la búsqueda sea completada.

En la sección de Horario, especifica la fecha y hora de Inicio de la búsqueda. Para poder comenzar a trabajar con la búsqueda inmediatamente, puedes elegir la fecha de hoy.

También debes especificar la duración de la búsqueda tecleando un valor en el campo Número de días. De manera opcional, puedes elegir notificar a los participantes de la búsqueda cuando ya casi no les queda tiempo.

Una búsqueda debe tener una recompensa--¿por qué otra cosa quisiera participar un usuario? Puedes especificar qué es la recompensa subiendo un archivo de recompensa. el cuál puede ser un archivo de cualquier formato. La mayoría de los desarrolladores eligen el formato JSON. Aquí hay un archivo de recompensa de ejemplo:

1
{
2
    points: 3000,
3
    max_lives: 15
4
}

Vale la pena notar que los contenidos de la recompensa no son importantes para las APIs de los servicios de juegos de Play. Es tu responsabilidad analizarlas y usarlas en tu juego.

En la sección de Datos de recompensa, presiona el botón Explorar y sube el archivo de recompensa que creaste.

Completion criteria schedule and reward data sectionsCompletion criteria schedule and reward data sectionsCompletion criteria schedule and reward data sections

Finalmente, presiona Guardar para generar un ID para la búsqueda. De manera opcional, puedes copiar el ID y agregarlo al archivo games-ids.xml de tu proyecto de Android Studio como otra etiqueta <string>.

1
<string name="quest_please_the_princess">BCDEABCD123</string>

4. Mostrando la UI de las Búsquedas

La API de búsquedas ofrece una actividad que puede mostrar todas las búsquedas que están disponibles en tu juego. La actividad también permite a los usuarios unirse a búsquedas.

Para abrir la actividad de búsquedas, debes crear un intent para esta usando el método getQuestsIntent() de la clase Games.Quests. Como sus argumentos, espera un objeto GoogleApiClient y un arreglo int especificando los tipos de búsquedas que quieres mostrar. Aquí hay algunos valores populares para los tipos de búsquedas:

  • Quests.SELECT_OPEN, una búsqueda en la que el usuario puede participar de inmediato.
  • Quests.SELECT_UPCOMING, una búsqueda que está por comenzar.
  • Quests.SELECT_COMPLETED, una búsqueda que el usuario ya ha completado.
  • Quests.SELECT_ACCEPTED, una búsqueda en la que el usuario está participando actualmente.

Después de crear el objeto Intent, puedes pasarlo al método startActivityForResult() para mostrar la actividad de búsquedas.

El siguiente código te muestra cómo abrir la actividad de búsquedas y mostrar cuatro tipos de búsquedas:

1
Intent intent = Games.Quests.getQuestsIntent(apiClient,
2
                new int[]{
3
                    Quests.SELECT_OPEN,
4
                    Quests.SELECT_UPCOMING,
5
                    Quests.SELECT_ACCEPTED,
6
                    Quests.SELECT_COMPLETED
7
                });
8
startActivityForResult(intent, 0);

Aquí está como luce una actividad de búsqueda:

Available questsAvailable questsAvailable quests

El usuario se convierte en participante de la búsqueda presionando el botón Aceptar. Durante una búsqueda, los usuarios pueden regresar a la UI de la búsqueda para ver qué tanto de la búsqueda ha sido completado.

5. Usando la API de Eventos

La API de eventos te permite manejar fácilmente los eventos en tu juego. Para cambiar el valor de un evento, puedes usar el método increment() de la clase Games.Events. Como sus argumentos, espera un objeto GoogleApiClient, el nombre del evento y un número especificando qué tanto debería ser incrementado el valor del evento.

El siguiente código incrementa el valor del evento event_collect_ring en 1

1
Games.Events.increment(apiClient, 
2
                       getString(R.string.event_collect_ring), 1);

Para recoger los valores actuales de eventos, debes usar el método load(). Debido a que el valor es recogido desde los servidores de Google asincrónicamente, el valor de retorno del método es una objeto PendingResult. Agregando un objeto ResultCallback a este, puedes ser notificado cuando el resultado está disponible.

Dentro del método onResult() de la interfaz ResultCallback, debes llamar al método getEvents() del objeto Events.LoadEventsResult, el cuál regresa un EventBuffer. Una vez que encuentras el Event deseado en el buffer, puedes llamar su método getValue() para obtener su valor actual.

El siguiente código te muestra cómo recoger el valor del evento event_collect_ring:

1
PendingResult<Events.LoadEventsResult> results =
2
                    Games.Events.load(apiClient, true);
3
4
results.setResultCallback(
5
    new ResultCallback<Events.LoadEventsResult>() {
6
        @Override
7
        public void onResult(@NonNull Events.LoadEventsResult 
8
                                            loadEventsResult) {
9
    
10
            // Fetch all events of the game

11
            EventBuffer events = loadEventsResult.getEvents();
12
    
13
            // Loop through all the events

14
            for(int i = 0; i < events.getCount(); i++) {
15
    
16
                Event currentEvent = events.get(i);
17
    
18
                // Check if current event is the desired event

19
                // and print its value

20
                if(currentEvent.getEventId().equals(getString(
21
                                   R.string.event_collect_ring)))
22
                    Log.d(TAG, "You have now collected " +
23
                          currentEvent.getValue() + " rings");
24
            }
25
        }
26
    }
27
);

6. Detectando la Terminación de la Búsqueda

Cuando un usuario completa una búsqueda a tiempo, tu juego debe poder recompensar al usuario usando el archivo de recompensas que subiste en la consola de desarrollador Play. Para detectar la terminación de búsqueda, debes crear un objeto QuestUpdateListener y registrarlo con la API de búsquedas usando el método registerQuestUpdateListener() de la clase Games.Quests.

Dentro del método onQuestCompleted() de la interface QuestUpdateListener, debes llamar al método claim() para reclamar la recompensa de la búsqueda. Debes pasar un objeto GoogleApiClient, el ID de la búsqueda y el ID de la meta actual al método.

Después de la reclamación, puedes recoger el archivo de recompensa como un arreglo byte llamando al método getCompletionRewardData(). Debido a que nuestra información de recompensa es solo un archivo JSON, puedes pasar el arreglo byte al constructor de la clase String para convertirlo a String.

1
Games.Quests.registerQuestUpdateListener(apiClient, 
2
    new QuestUpdateListener() {
3
        @Override
4
        public void onQuestCompleted(Quest quest) {
5
            Games.Quests.claim(apiClient, quest.getQuestId(), 
6
                                          quest.getCurrentMilestone()
7
                                               .getMilestoneId());
8
            byte[] rewardData = quest.getCurrentMilestone()
9
                                     .getCompletionRewardData();
10
            String reward = new String(rewardData);
11
        }
12
    }
13
);

En este punto, puedes convertir la cadena a una instancia  JSONObject y leer los valores de las llaves dentro de este. El siguiente código te muestra cuando recoges los valores de dos llaves llamadas points y max_lives:

1
try {
2
    JSONObject rewardObject = new JSONObject(reward);
3
    int points = rewardObject.getInt("points");
4
    int maxLives = rewardObject.getInt("max_lives");
5
    Log.d(TAG, "You have now gained "
6
            + points + " points and "
7
            + maxLives + " lives");
8
} catch(Exception e) {
9
    Log.e(TAG, "Couldn't parse JSON");
10
}

Nota que la actividad de búsquedas se actualiza automáticamente cuando una búsqueda ha sido completada. Aquí está como luce una búsqueda completa:

Completed questCompleted questCompleted quest

Conclusión

En este tutorial, aprendiste como usar las APIs de búsquedas y eventos para persuadir a los usuarios a jugar tu juego una y otra vez. Nota, sin embargo, que debido a que estas APIs tienen límites de valoración, debes tratar de evitar usarlos demasiado seguido en tu app. Puedes referirte a la página de lista de revisión de calidad de servicios de juegos de Play para aprender acerca de más restricciones y mejores prácticas.

Para aprender más acerca de las búsquedas y eventos, te puedes referir a su documentación oficial. Y mientras tanto, ¡revisa algunas de nuestras otras publicaciones sobre Firebase y Google Play Services!

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.