1. Descripción general
En este codelab, aprenderás a integrar el SDK de Firebase Games en C++ en un juego de Android de ejemplo usando Google Analytics como ejemplo. Podrás agregar las funciones que necesites, integrar cierta lógica de análisis básica para medir el progreso de los jugadores y compartir el juego con los verificadores para obtener comentarios anticipados.
Explicación
Si quieres realizar este codelab con los autores, mira este video:
Qué aprenderás
- Cómo agregar Firebase a tu juego basado en CMake para Android
- Cómo determinar qué dependencias de C++ y Gradle necesitas
- Cómo registrar eventos de Analytics
- Cómo depurar eventos de Analytics
- Cómo compartir tu juego con App Distribution
Requisitos
- Android Studio
- El código de muestra
- Un dispositivo de prueba o emulador con los Servicios de Google Play
2. Obtén el código de muestra
Descarga o extrae de GitHub:
git clone https://github.com/FirebaseExtended/cmake-way-for-firebase.git
Descarga el SDK de Firebase
macOS/Linux:
sh download.sh
Windows (desde PowerShell):
./download.ps1
También puedes descargar el SDK de forma manual. Si lo haces, el SDK de Firebase C++ se debe extraer en /third_party de modo que una carpeta llamada firebase_cpp_sdk tenga la raíz CMakeLists.txt del SDK de Firebase.
3. Ejecuta el juego de ejemplo
Primero, juega el juego de ejemplo y asegúrate de que todo funcione. Es un juego de corredor infinito simple con un nivel generado de forma procedimental y un solo botón para saltar.
- Selecciona File > New > Import Project (o selecciona Import Project en la pantalla de presentación).
- Abre la carpeta
proj.android/incluida en el repositorio.
- [Opcional] Abre
proj.android/gradle.propertiesy ajustaPROP_APP_ABI. Puedes quitar todas las arquitecturas, excepto la de destino, para reducir los tiempos de compilación.PROP_APP_ABI=x86se compilará solo para el emuladorPROP_APP_ABI=armeabi-v7ase compilará para la mayoría de los teléfonos - Haz clic en el botón Debug
para compilar y ejecutar el juego. La compilación del motor de juegos de Cocos2dx llevará tiempo.
4. Configuración de Firebase console
- Crea un proyecto nuevo en la consola de Firebase.

- Asigna un nombre, como "Popsicle Runner".
- Habilita Analytics

- Agrega o crea una cuenta de Analytics

- Agrega una nueva app para Android a tu proyecto

- Agrega
com.firebase.popsiclerunnercomo nombre del paquete.

- Descarga el archivo google-services.json y cópialo en
proj.android/app
.
- Ignora las instrucciones proporcionadas para agregar el SDK de Firebase y haz clic en Siguiente.
- Puedes hacer clic en "Omitir este paso" cuando se te solicite que verifiques la instalación.
5. Agrega Firebase a tu juego
Agrega el SDK de Firebase a CMakeLists.txt
Abre CMakeLists.txt a nivel de la raíz. Debería tener el siguiente código cerca de la parte superior:
CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
set(APP_NAME popsiclerunner)
project(${APP_NAME})
y agrega las siguientes líneas al final de ese archivo CMakeLists.txt
CMakeLists.txt
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/firebase_cpp_sdk)
target_link_libraries(${APP_NAME} firebase_analytics firebase_app)
add_subdirectory incluye el SDK de Firebase C++ y lo pone a disposición de este juego
target_link_libraries Vincula el juego con las bibliotecas de C++ de Firebase creadas para Android.
Agrega el complemento de Google Services
Para conectar el SDK de Firebase, debes agregar el complemento de Google Services a tu secuencia de comandos de compilación de Gradle. Para ello, abre el archivo build.gradle del nivel del proyecto (se encuentra en la carpeta proj.android). Además, agrega classpath 'com.google.gms:google-services:4.3.3' como dependencia de buildscript.
build.gradle
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.google.gms:google-services:4.3.3' // Google Services plugin
}
}
Luego, agrega el complemento al archivo build.gradle a nivel del módulo (que se encuentra en la carpeta proj.android/app). Agrega apply plugin: 'com.google.gms.google-services' debajo de apply plugin: 'com.android.application':
build.gradle
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services' // Google Services plugin
Cómo encontrar el SDK de C++ en Gradle
Para indicarle a Gradle dónde encontrar el SDK de Firebase C++, agrega las siguientes líneas en la parte inferior del archivo settings.gradle.
settings.gradle
gradle.ext.firebase_cpp_sdk_dir = "$settingsDir/../third_party/firebase_cpp_sdk/"
includeBuild "$gradle.ext.firebase_cpp_sdk_dir"
Agrega las dependencias de Android
Para conectar las dependencias de Android para Firebase, abre el archivo Gradle a nivel del módulo para popsicle_runner (en proj.android/app/build.gradle) y agrega lo siguiente justo antes de la sección dependences { típica al final:
build.gradle
apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
firebaseCpp.dependencies {
analytics
}
AndroidX y Jetifier
Para agregar compatibilidad con AndroidX y Jetifier, abre gradle.properties y agrega lo siguiente al final:
gradle.properties
android.useAndroidX = true
android.enableJetifier = true
Inicializa Firebase en tu juego
Para inicializar Firebase en el juego, abre Classes/AppDelegate.cpp. Agrega las siguientes directivas #include en la parte superior:
AppDelegate.cpp
#include <firebase/app.h>
#include <firebase/analytics.h>
Luego, agrega App::Create y, luego, inicializa las funciones de Firebase que necesites. Para ello, busca AppDelegate::applicationDidFinishLaunching y agrega este código antes de auto scene = MainMenuScene::createScene():
AppDelegate.cpp
{
using namespace firebase;
auto app = App::Create(JniHelper::getEnv(), JniHelper::getActivity());
analytics::Initialize(*app);
}
Si depuras el juego y actualizas el panel de Firebase, deberías ver un usuario nuevo después de un minuto.
6. Agrega Analytics
Incluso en las primeras etapas del desarrollo, Analytics es una herramienta útil para evaluar cómo interactúan los verificadores beta con el juego. Algunas estadísticas se recopilan automáticamente, como los informes de retención, pero es útil agregar eventos personalizados diseñados para tu juego específico.
Un buen punto de partida es registrar un evento de Analytics cuando el jugador comienza un nivel. Podemos usar la cantidad de eventos de inicio de nivel para ver con qué frecuencia un jugador puede volver a jugar el juego en una sesión.

También registraremos un evento cuando el jugador muera con la distancia que recorrió. Esto nos permitirá ver cómo los cambios que realizamos modifican la duración de una sola sesión y nos ayudará a determinar si los jugadores prefieren un juego más corto y difícil, o uno más largo y fácil.
Agrega encabezados de Analytics
Abre Classes/PopsicleScene.cpp y agrega encabezados de Firebase en la parte superior para que podamos realizar llamadas de Analytics.
PopsicleScene.cpp
#include <firebase/analytics.h>
#include <firebase/analytics/event_names.h>
Registra un evento de Level Start
Para registrar un evento cuando el Director de Cocos2dx organiza esta escena, busca la función PopsicleScene::onEnter(). Ingresa el siguiente código para registrar el evento Level Start aquí:
PopsicleScene.cpp
using namespace firebase;
analytics::LogEvent(analytics::kEventLevelStart);
Registra un evento de Level End
Para ver qué tan bien le está yendo a un jugador, registraremos un evento de finalización del nivel con la distancia que recorrió el jugador cuando finalmente murió. Para ello, busca PopsicleScene::gameOver() y agrega lo siguiente al final del bloque if(!_gameOver) { antes de configurar _gameOver = true;:
PopsicleScene.cpp
{
using namespace firebase;
analytics::LogEvent(analytics::kEventLevelEnd, "distance", _lastDistance);
}
kEventLevelEnd es el evento de finalización del nivel. Mientras que "distance" es un "parámetro del evento". Aquí agregamos la última distancia registrada, que es una buena aproximación de la distancia que recorrió un jugador antes de morir.
7. Eventos de prueba
Ahora puedes hacer clic en Depurar
, pero los eventos tardarán en aparecer en el panel de Analytics. Esto se debe a dos motivos: 1) los eventos se agrupan y suben aproximadamente una vez por hora para preservar la batería, y 2) los informes se generan cada 24 horas.
Cómo habilitar el modo de depuración
Aún es posible depurar los eventos de Analytics si pones tu dispositivo en modo de depuración.
Primero, asegúrate de tener instalado y configurado Android Debug Bridge (ADB). Si escribes adb devices, debería aparecer el dispositivo en el que realizarás la prueba:
$ adb devices List of devices attached emulator-5554 device
Luego, ejecuta el siguiente comando adb shell:
adb shell setprop debug.firebase.analytics.app com.firebase.popsiclerunner
Esto le indica a Firebase Analytics que registre eventos de inmediato y los excluirá automáticamente de tus informes normales para evitar que se contaminen tus eventos activos durante las pruebas. Si quieres deshacer esta acción más adelante, simplemente escribe lo siguiente:
adb shell setprop debug.firebase.analytics.app .none.
Visualiza eventos
Abre "DebugView" en Firebase console. 
Haz clic en Depurar
y juega. Deberías ver los eventos nuevos casi de inmediato después de que ocurran en el juego. 
Si expandes el evento level_end, también verás el parámetro personalizado "distance" que registraste. 
8. Cómo encontrar verificadores
A continuación, querrás que la gente vea tu juego, ya sea que se trate de personas internas de tu estudio, amigos cercanos o miembros de tu comunidad. Firebase App Distribution te ofrece una excelente manera de invitar a los jugadores a probar tu juego.
Cómo compilar un objeto binario independiente
Primero, compila un APK independiente para compartirlo desde Build > Build Bundles(s) / APK(s) > Build APK(s)
.
Android Studio mostrará un cuadro de diálogo que te permitirá ubicar el archivo compilado. Si no lo ves, puedes hacer clic en "Registro de eventos" para obtener el vínculo de nuevo. 
Subir a Firebase App Distribution
- Abre App Distribution y haz clic en "Comenzar"

- Arrastra y suelta tu archivo .apk en el cuadro que dice “Arrastra cualquier archivo .apk aquí para crear una versión nueva”.

- Ingresa tu dirección de correo electrónico como el primer verificador.

- Haz clic en Siguiente.
- Agrega una descripción y haz clic en Distribuir
Invitar a verificadores
En lugar de tener que ingresar manualmente cada dirección de correo electrónico, puedes crear un vínculo de invitación. Cuando capturas a un usuario con este vínculo de invitación, también puedes agregarlo a un grupo de verificadores. Por ejemplo, esto te permitiría separar a los verificadores internos de los externos.
- Haz clic en "Verificadores y grupos".

- Crea un grupo nuevo
y asígnale un nombre, como "Testers de Android". - Haz clic en "Vínculos de invitación"
. - Haz clic en "Nuevo vínculo de invitación".
- Establece el grupo aquí desde el menú desplegable.

- Haz clic en "Crear vínculo".
- Haz clic en "Copiar vínculo" y compártelo como quieras.
9. Felicitaciones
Agregaste estadísticas correctamente a tu juego basado en C++, invitaste a algunos amigos a jugar y sabes cómo encontrar y vincular bibliotecas de Firebase en un sistema de compilación basado en CMake y Gradle que es común en el desarrollo para Android.
Temas abordados
- Cómo agregar Firebase a tu juego basado en CMake para Android
- Cómo determinar qué dependencias de C++ y Gradle necesitas
- Cómo registrar eventos de Analytics
- Cómo depurar eventos de Analytics
- Cómo compartir tu juego con App Distribution
Próximos pasos
- Intenta acceder con un usuario anónimo y guardar su puntuación más alta en Realtime Database.
- Registra eventos de Analytics en tu propio juego.
- Intenta agregar Analytics a un juego para iOS.
Más información
- Consulta la lista de eventos específicos de juegos y considera cómo podrían adaptarse a tu juego.