1. Introducción
Los anuncios son una parte fundamental de la experiencia general del usuario de tu app. Las implementaciones de anuncios adecuadas pueden ayudar a mejorar la experiencia general de la app, así como la retención y la participación de los usuarios. Por ejemplo, los anuncios recompensados te permiten recompensar a los usuarios con moneda de la app o elementos por mirar anuncios de video. De esta manera, los usuarios pueden alcanzar nuevos objetivos que, de lo contrario, podrían quedarse atascados y desertar.
Sin embargo, no es fácil ofrecer una experiencia de anuncios excelente. Puede que tengas preguntas como las siguientes: ¿Con qué frecuencia deberías mostrar estos anuncios? ¿Dónde y cuándo deberías mostrarlos? ¿Cuál debería ser el premio? Lamentablemente, la respuesta difiere de una aplicación a otra, y de una posición a otra. No hay una respuesta única para todos.
Con Google Analytics para Firebase, AdMob y muchas otras herramientas potentes pero fáciles de usar que ofrece Firebase, ajustar tu app en función de los datos se ha vuelto mucho más fácil y optimizado. Hoy te mostraremos cómo puedes comenzar.
Qué compilarás
Este codelab es el primero de tres que te guiarán para que compiles una app llamada Awesome Drawing Quiz, un juego que les permite a los jugadores adivinar el nombre de un dibujo. Demostrará cómo puedes incorporar anuncios recompensados y servicios de Firebase en tu juego.
En este codelab, integrarás Google Analytics para Firebase con el fin de registrar algunos eventos importantes de la app. Además, aprenderás a leer las estadísticas de aplicaciones que se muestran en Firebase console.
Qué aprenderás
- Cómo configurar Google Analytics para Firebase en tu aplicación
- Cómo registrar los eventos de la app
- Cómo leer las estadísticas de aplicaciones que se muestran en Firebase console
Requisitos
- Unity 2018.4.4f1 o una versión posterior
- Xcode 10 o versiones posteriores (para compilar el destino para iOS)
- Una Cuenta de Google
- Un dispositivo de prueba con Android 5.0 o versiones posteriores con un cable USB para conectar el dispositivo, o un Android Emulator que ejecute un AVD(dispositivo virtual de Android) con una imagen del sistema compatible con las APIs de Play Store y Google
- Un dispositivo con iOS o un simulador que ejecute iOS 8.0 o una versión posterior
¿Cómo calificarías tu nivel de experiencia con AdMob?
¿Cómo calificarías tu nivel de experiencia con Firebase?
2. Configura el entorno de desarrollo
Descarga el código
Haz clic en el siguiente botón para descargar todo el código de este codelab:
Descomprime el archivo zip descargado. Se descomprimirá una carpeta raíz llamada admob-firebase-codelabs-unity-master
.
...o clonar el repositorio de GitHub desde la línea de comandos.
$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-unity
El repositorio contiene cuatro carpetas de la siguiente manera:
- 101-base: Código inicial que compilarás en este codelab
- 101-complete_and_102-base: Código completo para este codelab y para el codelab 102.
- 102-complete: Código completo para el codelab 102
Prepara los archivos requeridos
Awesome Drawing Quiz usa varios códigos de código abierto, que son necesarios para compilar y ejecutar el proyecto.
Abre la terminal y dirígete al directorio raíz del repositorio. Luego, ejecuta ./gradlew :prepareThirdPartyFiles
(gradlew.bat :prepareThirdPartyFiles
en Windows) desde la terminal para copiar los archivos necesarios en el proyecto.
Importa la app de partida
Inicia Unity, elige “Open” en la pantalla de bienvenida. Luego, selecciona el directorio 101-base del código que descargaste.
Ahora deberías tener el proyecto abierto en Unity.
3. Configura la unidad de anuncios de video recompensados (opcional)
Para tu conveniencia, la app de partida ya incluye una unidad exclusiva de anuncios de video recompensados. Puedes omitir este paso si no deseas crear uno nuevo en tu cuenta de AdMob.
Configuración para Android
Para crear una nueva aplicación de AdMob en tu cuenta, sigue las instrucciones que se indican a continuación:
- Ve a la consola de AdMob.
- En el menú Apps, haz clic en "Add App".
- Cuando se te pregunte si publicaste tu app en Google Play o App Store, responde "NO".
- Asígnale a la app el nombre "Awesome Drawing Quiz". elige "Android" como la plataforma y, luego, haz clic en "Agregar".
Una vez que hayas creado una aplicación de AdMob en tu cuenta, sigue los pasos que se describen a continuación para crear una nueva unidad de anuncios de videos recompensados.
- Haz clic en el menú Apps en el frontend de AdMob y, luego, selecciona "Awesome Drawing Quiz" en la lista de la app.
- Haz clic en el menú Unidades de anuncios y, luego, en AGREGAR UNIDAD DE ANUNCIOS para crear una nueva unidad de anuncios de video recompensado.
- Selecciona Recompensado en el formato del anuncio.
- Proporciona el nombre de la unidad de anuncios como prefieras. Luego, establece el importe de la recompensa en 1 y el elemento de la recompensa en "sugerencia" (estas son las recompensas que la app les ofrece actualmente a los usuarios). Por último, haz clic en CREAR UNIDAD DE ANUNCIOS para crear una nueva unidad de anuncios de video recompensados.
- Una vez que se haya creado correctamente, verás instrucciones como las siguientes.
- Regresa al proyecto de Unity y actualiza las constantes de ID de app y de ID de unidad de anuncios de AdMob a las que creaste en el paso anterior.
Anuncios/AdManager.cs
namespace AwesomeDrawingQuiz.Ads {
public class AdManager {
public const string APP_ID_ANDROID = "YOUR_ADMOB_APP_ID";
...
#elif UNITY_ANDROID
private const string APP_ID = APP_ID_ANDROID;
public const string AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";
...
}
}
Configuración para iOS
Para crear una nueva aplicación de AdMob en tu cuenta, sigue las instrucciones que se indican a continuación:
- Ve a la consola de AdMob.
- En el menú Apps, haz clic en "Add App".
- Cuando se te pregunte si publicaste tu app en Google Play o App Store, responde "NO".
- Asígnale a la app el nombre "Awesome Drawing Quiz". elige "iOS" como la plataforma y, luego, haz clic en "Agregar".
Una vez que hayas creado una aplicación de AdMob en tu cuenta, sigue los pasos que se describen a continuación para crear una nueva unidad de anuncios de videos recompensados.
- Haz clic en el menú Apps en el frontend de AdMob y, luego, selecciona "Awesome Drawing Quiz" en la lista de la app.
- Haz clic en el menú Unidades de anuncios y, luego, en AGREGAR UNIDAD DE ANUNCIOS para crear una nueva unidad de anuncios de video recompensado.
- Selecciona Recompensado en el formato del anuncio.
- Proporciona el nombre de la unidad de anuncios como prefieras. Luego, establece el importe de la recompensa en 1 y el elemento de la recompensa en "sugerencia" (estas son las recompensas que la app les ofrece actualmente a los usuarios). Por último, haz clic en CREAR UNIDAD DE ANUNCIOS para crear una nueva unidad de anuncios de video recompensados.
- Una vez que se haya creado correctamente, verás instrucciones como las siguientes.
- Regresa al proyecto de Unity y actualiza las constantes de ID de app y de ID de unidad de anuncios de AdMob a las que creaste en el paso anterior.
Anuncios/AdManager.cs
namespace AwesomeDrawingQuiz.Ads {
public class AdManager {
public const string APP_ID_IOS = "YOUR_ADMOB_APP_ID";
...
#elif UNITY_IOS
private const string APP_ID = APP_ID_IOS;
public const string AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";
...
}
}
4. Agrega el complemento Google Mobile Ads para Unity
Importa el complemento
Para publicar anuncios de AdMob en la app de Unity, debes agregar el complemento de Unity de Google Mobile Ads al proyecto.
- Descarga el paquete del complemento 3.18.1 de Google Mobile Ads para Unity. Ten en cuenta que este codelab puede no ser compatible con la otra versión del complemento.
- En el proyecto de Unity de Awesome Drawing Quiz En el proyecto, navega a Recursos > Importar paquete > Custom Package
- Importa el paquete GoogleMobileAds.unitypackage al proyecto que descargaste.
Configura el ID de app de AdMob
En Unity Editor, selecciona Assets > Anuncios de Google para dispositivos móviles > Configuración en el menú.
Para habilitar AdMob, haz clic en la casilla de verificación Habilitada en la sección Google AdMob. Luego, ingresa el ID de la app de AdMob como se indica a continuación:
- Android:
ca-app-pub-3940256099942544~3048611032
- iOS:
ca-app-pub-3940256099942544~2753522596
5. Configura un proyecto de Firebase
Crea un proyecto nuevo desde Firebase console
- Dirígete a Firebase console.
- Selecciona Agregar proyecto y asígnale el nombre "Awesome Drawing Quiz".
Agrega la app de Unity
- En la pantalla de descripción general del proyecto nuevo, haz clic en Add Firebase to your Unity app.
- Marca la casilla de verificación Register as iOS app.
- Ingresa el ID del paquete de iOS como: com.codelab.awesomedrawingquiz.unity.
- Proporciona un sobrenombre para la app como: Awesome Drawing Quiz (Unity en iOS)
- Marca la casilla de verificación Register as Android app.
- Ingresa el nombre del paquete de Android como: com.codelab.awesomedrawingquiz.unity.
- Proporciona un sobrenombre para la app como: Awesome Drawing Quiz (Unity en Android)
- Selecciona Registrar app a fin de registrar apps para iOS y Android.
Agrega archivos de configuración de Firebase al proyecto de Unity
A continuación, aparecerá una pantalla en la que podrás descargar un archivo de configuración con todos los metadatos de Firebase necesarios para tu app. Descarga los archivos google-service.json y GoogleService-Info.plist. Luego, muévelos a la carpeta Assets en el proyecto de Unity.
Agregar el SDK de Firebase Analytics
- Descarga el SDK de Firebase Unity 5.5.0 y descomprímelo en el lugar que prefieras.
- Abre el proyecto de Unity de Awesome Drawing Quiz, navega a Recursos > Importar paquete > Custom Package
- Desde el SDK que descomprimiste, importa el SDK de Remote Config (
dotnet4/FirebaseAnalytics.unitypackage
). - En la ventana Importar paquete de Unity, haz clic en Importar.
6. Cómo vincular AdMob al proyecto de Firebase
Completa los pasos que se indican a continuación para vincular tus aplicaciones a Firebase.
- Accede a tu cuenta de AdMob en https://apps.admob.com.
- Haz clic en Apps en la barra lateral.
- Selecciona "Awesome Drawing Quiz". Si no aparece en la lista de aplicaciones recientes, puedes hacer clic en Ver todas las aplicaciones para buscar en una lista con todas las aplicaciones que agregaste a AdMob.
- Haz clic en Configuración de la aplicación en la barra lateral.
- Haz clic en Vincular a Firebase.
- Selecciona la opción “Vincular a un proyecto de Firebase existente y crear una nueva app de Firebase”. Luego, selecciona el proyecto "Awesome Drawing Quiz" en el menú desplegable.
- Una vez que hagas clic en el botón "CONTINUAR", verás el mensaje "Se vinculó correctamente". Haz clic en el botón “LISTO” para finalizar.
Una vez que vincules tu app de AdMob al proyecto de Firebase, se desbloquearán algunas funciones adicionales en AdMob y en Firebase console de la siguiente manera:
Tarjeta de ingresos (AdMob)
En la tarjeta Ingresos, puedes obtener un panorama integral de todos los flujos de ingresos posibles en un solo lugar. Las fuentes de ingresos admitidas son las siguientes:
- AdMob (estimado)
- Redes de publicidad mediadas (observadas)
- Compras directas desde la aplicación
- Compras de comercio electrónico
Tarjeta Métricas del usuario (AdMob)
En la tarjeta de métricas del usuario, puedes ver cómo los cambios en tu experiencia de anuncios pueden afectar el comportamiento de los usuarios.
Informe de anuncios recompensados (AdMob)
El informe de anuncios recompensados ofrece una variedad de métricas que ayudarán a los publicadores a comprender cómo interactúan los usuarios con sus anuncios recompensados.
Tarjeta de ingresos totales (Firebase)
Después de vincular tu app de AdMob a Firebase, la tarjeta Ingresos totales del panel de Firebase mostrará los ingresos de AdMob junto con las compras directas desde la aplicación y las compras de comercio electrónico.
Informes de eventos de anuncios (Firebase)
Los eventos específicos de anuncios (eventos de clic, impresión y recompensa) se recopilan automáticamente y están disponibles para usarlos en Google Analytics para Firebase.
7. Cómo ejecutar el proyecto
Una vez que compiles y ejecutes el proyecto, verás la siguiente pantalla cuando se inicie la app.
Cuando hagas clic en “COMENZAR UN JUEGO”, verás un dibujo en la pantalla. Tu misión es adivinar el nombre del dibujo usando la sugerencia que aparece en la parte superior, con la que puedes inferir la primera letra y la longitud del nombre del dibujo.
Si no sabes cuál es el nombre del dibujo, puedes omitir el nivel haciendo clic en el botón “OMITIR”.
Es posible que quieras una pista adicional que te ayude a adivinar la respuesta. Para obtener una pista adicional, haz clic en el botón “SUGERENCIA” y mira un anuncio de video recompensado. Una vez que termines de ver el anuncio, se divulgará una carta adicional como recompensa.
8. Agregar eventos de aplicaciones
Para comprender en profundidad el recorrido del usuario en el Awesome Drawing Quiz, definirás algunos eventos personalizados que hagan un seguimiento del comportamiento del usuario en el juego de la siguiente manera:
Nombre del evento | Activado... | Parámetros |
game_start | Cuando un usuario inicia un nuevo juego. | ninguno |
level_start | Cuando un usuario comienza un nuevo nivel (un nuevo cuestionario de dibujo) dentro de una etapa. (hay 6 niveles en una etapa) | level_name |
level_wrong_answer | cuando un usuario envía una respuesta incorrecta | level_name |
ad_reward_prompt | Cuando un usuario presiona el botón de sugerencia y se le pide que mire un anuncio de video recompensado. | ad_unit_id |
ad_reward_impression | Cuando un usuario comienza a mirar un anuncio de video recompensado | ad_unit_id |
level_success | Cuando un usuario envía una respuesta correcta (borra un nivel) | nombre_nivel, número_de_intentos, tiempo_pasado_seg, hint_used |
level_fail | Cuando un usuario omite un nivel | nombre_nivel, número_de_intentos, tiempo_pasado_seg, hint_used |
game_complete | cuando termine el juego | number_of_correct_answers |
La descripción de cada parámetro asociado con cada evento es la siguiente:
Nombre del evento | Nombre del parámetro | Descripción |
level_start | level_name | Nombre del dibujo que se muestra en el nivel (p.ej., "banana") |
level_wrong_answer | level_name | Nombre del dibujo que se muestra en el nivel (p.ej., "banana") |
ad_reward_prompt | ad_unit_id | Un ID de unidad de anuncios que se usa para mostrar un anuncio de video recompensado |
ad_reward_impression | ad_unit_id | Un ID de unidad de anuncios que se usa para mostrar un anuncio de video recompensado |
level_success | level_name | Nombre del dibujo que se muestra en el nivel (p.ej., "banana") |
level_success | number_of_attempts | Cantidad de intentos para superar un nivel |
level_success | elapsed_time_sec | Tiempo transcurrido para superar un nivel (en segundos) |
level_success | hint_used | Indica si un usuario usó una sugerencia (vio un anuncio de video recompensado) o no para borrar un nivel (1: usó una sugerencia o 0: borró un nivel sin una pista). |
level_fail | level_name | Nombre del dibujo que se muestra en el nivel (p.ej., "banana") |
level_fail | number_of_attempts | Cantidad de intentos para superar un nivel |
level_fail | elapsed_time_sec | Tiempo transcurrido para superar un nivel (en segundos) |
level_fail | hint_used | Indica si un usuario usó una sugerencia (vio un anuncio de video recompensado) o no para borrar un nivel (1: usó una sugerencia o 0: borró un nivel sin una pista). |
game_complete | number_of_correct_answers | Cantidad de niveles que se borraron en el juego |
Crea una clase de ayuda para registrar eventos personalizados
Para registrar el evento de Analytics con facilidad, crearás una clase de ayuda que administre los eventos personalizados.
Primero, crea una carpeta nueva dentro de la carpeta Assets/Scripts
y asígnale el nombre Analytics
. Luego, crea una nueva secuencia de comandos de C# y asígnale el nombre QuizAnalytics.cs
en la carpeta Analytics
.
Agrega el siguiente código al archivo QuizAnalytics.cs
.
Analytics/QuizAnalytics.cs
using Firebase.Analytics;
namespace AwesomeDrawingQuiz.Analytics {
public class QuizAnalytics {
private const string EVENT_AD_REWARD_PROMPT = "ad_reward_prompt";
private const string EVENT_AD_REWARD_IMPRESSION = "ad_reward_impression";
private const string EVENT_LEVEL_FAIL = "level_fail";
private const string EVENT_LEVEL_SUCCESS = "level_success";
private const string EVENT_LEVEL_WRONG_ANSWER = "level_wrong_answer";
private const string EVENT_GAME_START = "game_start";
private const string EVENT_GAME_COMPLETE = "game_complete";
private const string PARAM_AD_UNIT_ID = "ad_unit_id";
private const string PARAM_ELAPSED_TIME_SEC = "elapsed_time_sec";
private const string PARAM_HINT_USED = "hint_used";
private const string PARAM_NUMBER_OF_ATTEMPTS = "number_of_attempts";
private const string PARAM_NUMBER_OF_CORRECT_ANSWERS = "number_of_correct_answers";
public const string SCREEN_MAIN = "main";
public const string SCREEN_GAME = "game";
public static void LogGameStart() {
FirebaseAnalytics.LogEvent(EVENT_GAME_START);
}
public static void LogLevelStart(string levelName) {
FirebaseAnalytics.LogEvent(FirebaseAnalytics.EventLevelStart,
FirebaseAnalytics.ParameterLevelName, levelName);
}
public static void LogLevelWrongAnswer(string levelName) {
FirebaseAnalytics.LogEvent(EVENT_LEVEL_WRONG_ANSWER,
FirebaseAnalytics.ParameterLevelName, levelName);
}
public static void LogAdRewardPrompt(string adUnitId) {
FirebaseAnalytics.LogEvent(EVENT_AD_REWARD_PROMPT, PARAM_AD_UNIT_ID, adUnitId);
}
public static void LogAdRewardImpression(string adUnitId) {
FirebaseAnalytics.LogEvent(EVENT_AD_REWARD_IMPRESSION, PARAM_AD_UNIT_ID, adUnitId);
}
public static void LogLevelSuccess(
string levelName, int numberOfAttemps, int elapsedTimeInSec, bool hintUsed
) {
FirebaseAnalytics.LogEvent(EVENT_LEVEL_SUCCESS, new Parameter[] {
new Parameter(FirebaseAnalytics.ParameterLevelName, levelName),
new Parameter(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttemps),
new Parameter(PARAM_ELAPSED_TIME_SEC, elapsedTimeInSec),
new Parameter(PARAM_HINT_USED, hintUsed ? 1 : 0)
});
}
public static void LogLevelFail(
string levelName, int numberOfAttempts, int elapsedTimeInSec, bool hintUsed
) {
FirebaseAnalytics.LogEvent(EVENT_LEVEL_FAIL, new Parameter[] {
new Parameter(FirebaseAnalytics.ParameterLevelName, levelName),
new Parameter(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts),
new Parameter(PARAM_ELAPSED_TIME_SEC, elapsedTimeInSec),
new Parameter(PARAM_HINT_USED, hintUsed ? 1 : 0)
});
}
public static void LogGameComplete(int numberOfCorrectAnswers) {
FirebaseAnalytics.LogEvent(EVENT_GAME_COMPLETE,
PARAM_NUMBER_OF_CORRECT_ANSWERS, numberOfCorrectAnswers);
}
public static void SetScreenName(string screenName) {
FirebaseAnalytics.SetCurrentScreen(screenName, null);
}
}
}
Cómo registrar eventos de estadísticas en el juego
Abre el archivo Game.cs
en la carpeta Assets/Scripts/Scenes
. Para usar la clase QuizAnalytics
, que se encuentra en el espacio de nombres AwesomeDrawingQuiz.Analytics
, agrega la directiva de uso de la siguiente manera.
Scenes/Game.cs
using AwesomeDrawingQuiz.Ads;
// TODO: Import AwesomeDrawingQuiz.Analytics (101)
using AwesomeDrawingQuiz.Analytics;
...
namespace AwesomeDrawingQuiz.Scene {
...
}
A continuación, en la función Start()
, llama a QuizAnalytics.SetScreenName()
para cambiar el nombre de la pantalla actual. Además, llama a QuizAnalytics.LogGameStart()
para indicar que comenzó un juego.
Scenes/Game.cs
void Start () {
// TODO: Log screen name (101)
QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_GAME);
...
SetHintButtonEnabled(false);
// TODO: Log game_start event (101)
QuizAnalytics.LogGameStart();
...
}
A continuación, en las funciones de devolución de llamada, agrega llamadas para registrar eventos personalizados de la siguiente manera:
Scenes/Game.cs
public void OnClickHint() {
// TODO: Log ad_reward_prompt event (101)
QuizAnalytics.LogAdRewardPrompt(AdManager.AD_UNIT_ID);
...
}
...
public void OnAdStarted(object sender, EventArgs args) {
// TODO: Log ad_reward_impression event (101)
QuizAnalytics.LogAdRewardImpression(AdManager.AD_UNIT_ID);
}
...
public void OnGameOver(object sender, GameOverEventArgs args) {
// TODO: Log game_complete event (101)
QuizAnalytics.LogGameComplete(args.NumCorrectAnswers);
...
}
public void OnLevelCleared(object sender, LevelClearEventArgs args) {
// TODO: Log level_success event (101)
QuizAnalytics.LogLevelSuccess(
args.Drawing.word, args.NumAttempts, args.ElapsedTimeInSeconds, args.IsHintUsed);
...
}
public void OnLevelSkipped(object sender, LevelSkipEventArgs args) {
// TODO: Log level_fail event (101)
QuizAnalytics.LogLevelFail(
args.Drawing.word, args.NumAttempts, args.ElapsedTimeInSeconds, args.IsHintUsed);
}
public void OnNewLevel(object sender, NewLevelEventArgs args) {
// TODO: Log level_start event (101)
QuizAnalytics.LogLevelStart(args.Drawing.word);
...
}
public void OnWrongAnwser(object sender, WrongAnswerEventArgs args) {
// TODO: Log level_wrong_answer event (101)
QuizAnalytics.LogLevelWrongAnswer(args.Drawing.word);
...
}
Por último, actualiza el archivo Main.cs en la carpeta Assets/Scripts/Scenes
. Debes asegurarte de que Firebase esté listo antes de llamar a cualquier método en el SDK de Firebase.
Escenas/Main.cs
using AwesomeDrawingQuiz.Ads;
// TODO: Import AwesomeDrawingQuiz.Analytics (101)
using AwesomeDrawingQuiz.Analytics;
...
namespace AwesomeDrawingQuiz.Scene {
public class Main : MonoBehaviour {
...
void Start () {
Screen.sleepTimeout = SleepTimeout.SystemSetting;
#if UNITY_ANDROID
// Disable 'Start a game' button until
// Firebase dependencies are ready to use on the Android
buttonStartGame.interactable = false;
// TODO: Check Google Play Services on Android (101)
// Check Google Play Services on Android device is up to date
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
var dependencyStatus = task.Result;
if (dependencyStatus == Firebase.DependencyStatus.Available) {
Debug.Log("All Firebase services are available");
// TODO: Set screen name (101)
QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_MAIN);
} else {
throw new System.InvalidOperationException(System.String.Format(
"Could not resolve all Firebase dependencies: {0}", dependencyStatus));
}
}).ContinueWith(task => {
// Enable 'Start a game' button
UnityMainThreadDispatcher.Instance()
.Enqueue(() => buttonStartGame.interactable = true);
});
#else
// TODO: Set screen name (101)
QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_MAIN);
#endif
}
...
}
}
9. Cómo depurar eventos de estadísticas
Puedes utilizar DebugView para verificar los eventos que se registran correctamente. DebugView te permite ver los datos de eventos sin procesar que registra tu app en dispositivos de desarrollo casi en tiempo real.
Esto es muy útil para la validación durante la fase de instrumentación del desarrollo y puede ayudarte a descubrir errores y errores en tu implementación de estadísticas.
Cómo habilitar el modo de depuración en Android
Por lo general, los eventos registrados en tu app se agrupan en lotes durante un período de aproximadamente una hora y se suben juntos. Para validar tu implementación de estadísticas sobre la marcha, debes habilitar el modo de depuración en tu dispositivo de desarrollo para subir eventos con retrasos mínimos.
Primero, abre la herramienta Terminal en Android Studio. Se encuentra en la barra de herramientas inferior.
Luego, ejecuta el siguiente comando (asegúrate de que el dispositivo Android de prueba esté conectado a tu computadora o que se esté ejecutando Android Emulator):
adb shell setprop debug.firebase.analytics.app com.google.codelab.awesomedrawingquiz
Este comportamiento persiste hasta que inhabilites explícitamente el modo de depuración a través del siguiente comando:
adb shell setprop debug.firebase.analytics.app .none.
Cómo habilitar el modo de depuración en iOS
Para habilitar el modo de depuración de Analytics en tu dispositivo de desarrollo, especifica el siguiente argumento de línea de comandos en Xcode:
-FIRDebugEnabled
Este comportamiento persiste hasta que se inhabilita explícitamente el modo de depuración mediante la especificación del siguiente argumento de línea de comandos:
-FIRDebugDisabled
Cómo depurar eventos de Analytics con DebugView
Una vez que hayas habilitado el modo de depuración en tu dispositivo de prueba, ve a Firebase console y selecciona DebugView en el menú. Luego, en tu dispositivo de prueba, juega para ver los eventos que se registran y se muestran en el informe de DebugView.
Para acceder a información detallada sobre cada evento, haz clic en el nombre del evento. A modo de ejemplo, en la siguiente captura de pantalla, se muestran los detalles de los parámetros asociados con el evento level_start
.
Para obtener más información, consulta el artículo del Centro de ayuda de DebugView.
10. Habilitar los informes de parámetros
Google Analytics para Firebase recopilará la cantidad total de recuentos de eventos de forma predeterminada, pero los informes de los parámetros personalizados deben activarse de forma explícita para cada parámetro de evento que te interese. Una vez habilitada, Google Analytics para Firebase mostrará tarjetas adicionales con las estadísticas de los parámetros personalizados.
Para registrar parámetros personalizados en un evento, siga estos pasos:
- Ve a Firebase console y selecciona el proyecto de Awesome Drawing Quiz que creaste anteriormente.
- Haz clic en Eventos en el menú de navegación.
- En la fila del evento que deseas modificar, haz clic en .> Editar informes de parámetros
- En el campo Ingresar nombre del parámetro, ingrese el nombre del parámetro que desea registrar.
Nota: Si no se encuentran coincidencias, solo ingresa el nombre del parámetro y, luego, haz clic en AGREGAR. 5. Consulta la tabla que aparece a continuación y configura el campo Tipo como Texto o Número según corresponda. En el caso de los parámetros numéricos, asegúrate de configurar también el campo Unidad de medida. 6. Haz clic en el botón GUARDAR para finalizar la configuración.
Habilita los informes de parámetros en cada evento que se indica a continuación.
Nombre del evento | Nombre del parámetro | Tipo de parámetro | Unidad de medida |
level_start | level_name | Texto | N/A |
level_wrong_answer | level_name | Texto | N/A |
level_success | level_name | Texto | N/A |
level_success | number_of_attempts | Número | Estándar |
level_success | elapsed_time_sec | Número | Segundos |
level_success | hint_used | Número | Estándar |
level_fail | level_name | Texto | N/A |
level_fail | number_of_attempts | Número | Estándar |
level_fail | elapsed_time_sec | Número | Segundos |
level_fail | hint_used | Número | Estándar |
game_complete | number_of_correct_answers | Número | Estándar |
En el siguiente ejemplo, se muestra la configuración de los informes de parámetros personalizados para el evento level_success
:
Una vez que completes la configuración de los informes de parámetros, podrás ver los parámetros asociados con cada evento que tenga activados los informes de parámetros.
11. Cómo obtener estadísticas a partir del informe de eventos
A medida que agregaste algunos eventos en el juego, deberías poder responder a las preguntas relacionadas con el comportamiento del usuario. Estas son algunas estadísticas que puedes obtener del informe de eventos de Firebase.
¿Qué nivel tiene la mayor cantidad de respuestas incorrectas?
Para responder esta pregunta, debes averiguar cuántos eventos level_wrong_answer
se activaron por cada nivel.
En el informe de eventos, haz clic en level_wrong_answer
. En el informe de eventos de level_wrong_answer
, busca la tarjeta level_name
. Verás los valores asociados con el parámetro level_name
en esa tarjeta de la siguiente manera.
Según la captura de pantalla anterior, puedes descubrir fácilmente que horizon tiene la mayor cantidad de respuestas incorrectas, lo que significa que es difícil para los usuarios en comparación con los otros niveles.
Con la información que obtuviste aquí, puedes decidir no proporcionar niveles difíciles a los usuarios principiantes para mantener una tasa de retención alta.
¿Cuántos intentos, en promedio, se hicieron para superar un nivel?
En el Awesome Drawing Quiz, los usuarios pueden enviar las respuestas de cada nivel tanto como quieran.
Como habilitaste los informes de parámetros en el parámetro number_of_attempts
en el evento level_success
, puedes ver las métricas detalladas de ese parámetro.
En el informe de eventos, haz clic en el evento level_success
. En el informe de eventos de level_success
, busca la tarjeta number_of_attemps
. Verás la cantidad promedio de intentos en esa tarjeta de la siguiente manera:
Puedes usar esta información para optimizar la dificultad del juego en promedio. Por ejemplo, si la cantidad promedio de intentos es muy cercana a 1, puedes hacer que el juego sea un poco más difícil.
¿Los usuarios intentaron resolver la pregunta con una pista, a pesar de no haber superado un nivel?
Cuando un usuario decide omitir un nivel, se activa un evento level_fail
. Puede haber muchas razones para la decisión del usuario.
Sin embargo, dado que el juego puede darle una pista después de que miran un anuncio de video recompensado, es importante saber que el usuario trató de superar el nivel con la ayuda de la sugerencia, al menos.
En el informe de eventos, haz clic en el evento level_fail
. En el informe de eventos de level_fail
, busca la tarjeta hint_used
. Verás la cantidad promedio de parámetros del evento hint_used
. Ten en cuenta que cuando se usa una sugerencia, se establece en 1, mientras que en 0 cuando no se usó una sugerencia.
Si las cifras de la tarjeta hint_used
están cerca de 0, es un indicador de que la recompensa (sugerencia) no es del todo atractiva para los usuarios. Además, estás perdiendo la oportunidad de aumentar los ingresos de los anuncios de video recompensados.
Por lo tanto, considera hacer que la recompensa sea más útil para los usuarios, de modo que estos puedan participar más en el juego y aumenten los ingresos del anuncio de video recompensado.
¿Cuántos niveles se superaron en cada juego, en promedio?
Hay un total de 6 niveles por cada juego en el Awesome Drawing Quiz. Una vez que el usuario termina seis niveles (independientemente de que haya superado cada nivel o haya fallado), se activa un evento game_complete
con number_of_correct_answers
como parámetro.
Dado que number_of_correct_answers
indica cuántos niveles superó el usuario (proporcionaron una respuesta correcta), puedes encontrar la respuesta consultando las métricas del parámetro number_of_correct_answers
.
Haz clic en el evento game_complete
en el informe de eventos. En el informe de eventos game_complete, busca la tarjeta number_of_correct_answers
. Verás la cantidad promedio de parámetros del evento number_of_correct_answers
.
Si la cantidad promedio de niveles es demasiado bajo, considera reorganizar el juego para ayudar a las personas a superar un nivel, de modo que puedan seguir jugando sin perder su interés.
12. Todo listo
Completaste el codelab de Unity de AdMob+Firebase 101. Puedes encontrar el código completo de este codelab en la carpeta 101-complete_and_102-base.
En la siguiente parte del codelab de AdMob y Firebase, aprenderás a usar un embudo para visualizar el flujo de eventos de la app. Además, se explicará cómo usar Remote Config y A/B Testing para optimizar el valor del parámetro en el juego sin una actualización de la app.