AdMob+Firebase 101 Unity: configuración y Conceptos básicos de Analytics

1. Introducción

Los anuncios son una parte fundamental de la experiencia del usuario general de tu app. Las buenas implementaciones de anuncios pueden ayudar a mejorar la experiencia general de la app y hasta la retención y la participación de los usuarios. Por ejemplo, los anuncios recompensados te permiten recompensar a los usuarios con elementos o monedas integrados en la app por mirar anuncios de video, de modo que puedan alcanzar nuevas metas en las que, de lo contrario, podrían quedarse atascados y abandonar la app.

Sin embargo, crear una excelente experiencia con los anuncios no es fácil. Es posible que tengas preguntas como: ¿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 varía según la app y la posición. No existe una respuesta única para todos los casos.

Con Google Analytics para Firebase, AdMob y otras herramientas potentes y fáciles de usar que ofrece Firebase, ajustar tu app de forma basada en datos se volvió mucho más sencillo y optimizado. Hoy te mostraremos cómo comenzar.

Qué compilarás

Este codelab es el primero de tres que te guiarán para que crees una app llamada Awesome Drawing Quiz, un juego en el que los participantes deben adivinar el nombre de un dibujo. En él, se mostrará cómo puedes incorporar anuncios recompensados y servicios de Firebase en tu juego.

En este codelab, integrarás Google Analytics para Firebase y registrarás algunos eventos importantes de la app. Además, aprenderás a leer las estadísticas de la app que se muestran en Firebase console.

Qué aprenderás

  • Cómo configurar Google Analytics para Firebase en tu app
  • Cómo registrar los eventos de la app
  • Cómo leer las estadísticas de la app que se muestran en Firebase console

Requisitos

  • Unity 2018.4.4f1 o una versión posterior
  • Xcode 10 o una versión posterior (para compilar el destino para iOS)
  • Una Cuenta de Google
  • Un dispositivo de prueba con Android 5.0 o versiones posteriores y un cable USB para conectarlo, o un emulador de Android que ejecute un AVD(dispositivo virtual Android) con una imagen del sistema que admita Play Store o las APIs de Google
  • Un dispositivo iOS o un simulador que ejecute iOS 8.0 o versiones posteriores

¿Cómo calificarías tu nivel de experiencia con AdMob?

Principiante Intermedio Avanzado

¿Cómo calificarías tu nivel de experiencia con Firebase?

Principiante Intermedio Avanzado

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:

Descargar código fuente

Descomprime el archivo zip descargado. Esto descomprimirá una carpeta raíz llamada admob-firebase-codelabs-unity-master.

… o clona 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:

  • android_studio_folder.png101-base: Código inicial que compilarás en este codelab
  • android_studio_folder.png101-complete_and_102-base: Código completo para este codelab y código inicial para el codelab 102
  • android_studio_folder.png102-complete: Código completo para el codelab 102

Prepara los archivos requeridos

El Awesome Drawing Quiz usa varios códigos de código abierto, que son necesarios para compilar y ejecutar el proyecto.

Abre la terminal y muévete 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.

Cómo importar la app de inicio

Inicia Unity y elige "Abrir" 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 comodidad, la app de inicio ya incluye una unidad de anuncios de video recompensados exclusiva. Puedes omitir este paso si no quieres crear una nueva cuenta en tu cuenta de AdMob.

Configuración para Android

Para crear una nueva app de AdMob en tu cuenta, sigue estas instrucciones:

  1. Ve a la Consola de AdMob.
  2. En el menú Apps, haz clic en "Add App".
  3. Cuando se te pregunte si publicaste tu app en Google Play o App Store, responde "NO".
  4. Asigna el nombre "Awesome Drawing Quiz" a la app, elige "Android" como plataforma y, luego, haz clic en "Agregar".

Una vez que hayas creado una app de AdMob en tu cuenta, sigue los pasos que se describen a continuación para crear una nueva unidad de anuncios de video recompensado.

  1. Haz clic en el menú Apps en la interfaz de AdMob y, luego, selecciona "Awesome Drawing Quiz" en la lista de apps.
  2. 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.
  3. Selecciona Recompensado para el formato del anuncio.

7672f41ec611101b.png

  1. Proporciona el nombre de la unidad de anuncios como prefieras. Luego, establece la cantidad de recompensa en 1 y el elemento de recompensa en "pista" (estas son las recompensas que la app les otorga actualmente a los usuarios). Haz clic en CREAR UNIDAD DE ANUNCIOS para crear una nueva unidad de anuncios de video recompensado.

6d067814a2c38264.png

  1. Cuando se cree correctamente, verás instrucciones como las siguientes.

4bc1b3b341a5a81c.png

  1. Vuelve al proyecto de Unity y actualiza las constantes del ID de la app y el ID de la unidad de anuncios de AdMob con los que creaste en el paso anterior.

Ads/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 app de AdMob en tu cuenta, sigue estas instrucciones:

  1. Ve a la Consola de AdMob.
  2. En el menú Apps, haz clic en "Add App".
  3. Cuando se te pregunte si publicaste tu app en Google Play o App Store, responde "NO".
  4. Asigna el nombre "Awesome Drawing Quiz" a la app, elige "iOS" como plataforma y, luego, haz clic en "Agregar".

Una vez que hayas creado una app de AdMob en tu cuenta, sigue los pasos que se describen a continuación para crear una nueva unidad de anuncios de video recompensado.

  1. Haz clic en el menú Apps en la interfaz de AdMob y, luego, selecciona "Awesome Drawing Quiz" en la lista de apps.
  2. 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.
  3. Selecciona Recompensado para el formato del anuncio.

7672f41ec611101b.png

  1. Proporciona el nombre de la unidad de anuncios como prefieras. Luego, establece la cantidad de recompensa en 1 y el elemento de recompensa en "pista" (estas son las recompensas que la app les otorga actualmente a los usuarios). Haz clic en CREAR UNIDAD DE ANUNCIOS para crear una nueva unidad de anuncios de video recompensado.

6d067814a2c38264.png

  1. Cuando se cree correctamente, verás instrucciones como las siguientes.

4bc1b3b341a5a81c.png

  1. Vuelve al proyecto de Unity y actualiza las constantes del ID de la app y el ID de la unidad de anuncios de AdMob con los que creaste en el paso anterior.

Ads/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 de Google Mobile Ads para Unity

Importa el complemento

Para publicar anuncios de AdMob en la app de Unity, debes agregar el complemento de Google Mobile Ads Unity al proyecto.

  1. Descarga el paquete Google Mobile Ads Unity Plugin 3.18.1. (Ten en cuenta que este codelab podría no ser compatible con la otra versión del complemento).
  2. En el proyecto de Unity Awesome Drawing Quiz En el proyecto, ve a Assets > Import Package > Custom Package.
  3. Importa GoogleMobileAds.unitypackage al proyecto que descargaste.

Configura el ID de app de AdMob

En el editor de Unity, selecciona Assets > Google Mobile Ads > Settings en el menú.

44fc84fe88235c1f.png

Para habilitar AdMob, haz clic en la casilla de verificación Habilitado en la sección Google AdMob. Luego, ingresa el ID de la app de AdMob de la siguiente manera:

  • Android: ca-app-pub-3940256099942544~3048611032
  • iOS: ca-app-pub-3940256099942544~2753522596

a6ad7402d4daf330.png

5. Configura el proyecto de Firebase

Crea un proyecto nuevo en Firebase console

  1. Ve a Firebase console.
  2. Selecciona Agregar proyecto y asígnale el nombre "Awesome Drawing Quiz".

Agrega la app de Unity

  1. En la pantalla de resumen de tu proyecto nuevo, haz clic en Agregar Firebase a tu app de Unity.
  2. Marca la casilla de verificación Registrar como app para iOS.
  3. Ingresa el ID del paquete de iOS como com.codelab.awesomedrawingquiz.unity.
  4. Proporciona un apodo para la app, como Awesome Drawing Quiz (Unity on iOS).
  5. Marca la casilla de verificación Registrar como app para Android.
  6. Ingresa el nombre del paquete de Android como com.codelab.awesomedrawingquiz.unity.
  7. Proporciona un apodo para la app, como Awesome Drawing Quiz (Unity en Android).
  8. Selecciona Registrar app para registrar las 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 que contiene todos los metadatos necesarios de Firebase para tu app. Descarga los archivos google-service.json y GoogleService-Info.plist y, luego, muévelos a la carpeta android_studio_folder.pngAssets del proyecto de Unity.

331c165d80ba105e.png

Agrega el SDK de Firebase Analytics

  1. Descarga el SDK de Firebase Unity 5.5.0 y descomprímelo en el lugar que prefieras.
  2. Abre el proyecto de Unity Awesome Drawing Quiz y ve a Assets > Import Package > Custom Package.
  3. En el SDK que descomprimiste, importa el SDK de Remote Config (dotnet4/FirebaseAnalytics.unitypackage).
  4. En la ventana Import Unity package, haz clic en Import.

6. Vincula AdMob al proyecto de Firebase

Sigue los pasos que se indican a continuación para vincular tus apps a Firebase.

  1. Accede a tu cuenta de AdMob en https://apps.admob.com.
  2. Haz clic en Aplicaciones en la barra lateral.
  3. Selecciona "Awesome Drawing Quiz". Si no aparece en la lista de apps recientes, puedes hacer clic en Ver todas las aplicaciones para buscarla en la lista de todas las apps que agregaste a AdMob.
  4. Haz clic en Configuración de la aplicación en la barra lateral.
  5. Haz clic en Vincular a Firebase.
  6. Selecciona la opción "Vincular a un proyecto de Firebase existente y crear una app de Firebase nueva". Luego, selecciona el proyecto "Awesome Drawing Quiz" en el menú desplegable.
  7. 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, como las siguientes:

Tarjeta de ingresos (AdMob)

En la tarjeta Ingresos, puedes obtener una visión 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 de mediación (observadas)
  • Compras directas desde la aplicación
  • Compras de comercio electrónico

10fe118249e11150.png

Tarjeta de métricas del usuario (AdMob)

En la tarjeta de métricas del usuario, puedes ver cómo los cambios en la experiencia de tus anuncios pueden afectar el comportamiento de los usuarios.

5f56366f1b31d4a1.png

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.

658a2868777690ea.png

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.

98cb283977b023a.png

Informes de eventos de anuncios (Firebase)

Los eventos específicos de anuncios (eventos de clics, impresiones y recompensas) se recopilan automáticamente y están disponibles para su uso en Google Analytics para Firebase.

bf77bd8c00c1441b.png

7. Cómo ejecutar el proyecto

Una vez que compiles y ejecutes el proyecto, verás la siguiente pantalla cuando se inicie la app.

f5fbf4565c5d8647.png

Una vez que hagas clic en "COMENZAR UN JUEGO", verás un dibujo en la pantalla. Tu misión es adivinar el nombre del dibujo con la pista que se muestra en la parte superior, con la que puedes inferir la primera letra y la longitud del nombre del dibujo.

bbdf4d23fb08a519.png ad82d7e657945c4d.png

Si no tienes idea de 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. Puedes obtener una pista adicional haciendo clic en el botón "PISTA" y mirando un anuncio de video recompensado. Después de que termines de mirar el anuncio, se revelará una letra adicional como recompensa.

8c33687361f83a13.png b048d6587c10e9df.png

8. Agrega eventos de aplicaciones

Para comprender en profundidad el recorrido del usuario en el Awesome Drawing Quiz, definirás algunos eventos personalizados que registren el comportamiento del usuario en el juego de la siguiente manera:

Nombre del evento

Se activó…

Parámetros

game_start

Cuando un usuario comienza un juego nuevo

ninguno

level_start

Cuando un usuario comienza un nivel nuevo (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 solicita 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 (completa un nivel)

level_name, number_of_attempts, elapsed_time_sec, hint_used

level_fail

Cuando un usuario omite un nivel

level_name, number_of_attempts, elapsed_time_sec, hint_used

game_complete

Cuando termina el juego

number_of_correct_answers

A continuación, se incluye la descripción de cada parámetro asociado con cada evento:

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

Es el ID de la unidad de anuncios que se usa para mostrar un anuncio de video recompensado.

ad_reward_impression

ad_unit_id

Es el ID de la 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 completar un nivel, en segundos

level_success

hint_used

Indica si un usuario usó una pista (miró un anuncio de video recompensado) o no para completar un nivel (1: usó una pista; 0: completó 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 completar un nivel, en segundos

level_fail

hint_used

Indica si un usuario usó una pista (miró un anuncio de video recompensado) o no para completar un nivel (1: usó una pista; 0: completó un nivel sin una pista).

game_complete

number_of_correct_answers

Cantidad de niveles completados en el juego

Crea una clase de asistente para registrar eventos personalizados

Para registrar el evento de Analytics con facilidad, crearás una clase de asistente para administrar eventos personalizados.

Primero, crea una carpeta nueva en la carpeta Assets/Scripts y asígnale el nombre Analytics. Luego, crea un nuevo C# Script 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);
        }
    }
}

Registra eventos de análisis 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 using 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.

Scenes/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. Depura eventos de Analytics

Puedes usar DebugView para verificar que los eventos se registren correctamente. DebugView te permite ver los datos de eventos sin procesar registrados por 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 te puede ayudar a descubrir fallas y errores en la implementación de Analytics.

Habilita el modo de depuración en Android

Por lo general, los eventos que se registran en tu app se agrupan en paquetes durante un período de aproximadamente una hora y se suben juntos. Para validar tu implementación de Analytics 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.

c8dc1b4f08a224b8.png

Luego, ejecuta el siguiente comando (asegúrate de que el dispositivo Android de prueba esté conectado a tu computadora o de 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 cómo se registran los eventos y se muestran en el informe de DebugView.

827059255d09ac00.png

Para acceder a información detallada sobre cada evento, haz clic en su nombre. Por ejemplo, en la siguiente captura de pantalla, se muestran los detalles de los parámetros asociados con el evento level_start.

475db00d05d03ab8.png

Consulta el artículo del Centro de ayuda de DebugView para obtener más detalles.

10. Habilita los informes de parámetros

Google Analytics para Firebase recopilará la cantidad total de registros de eventos de forma predeterminada, pero los informes de los parámetros personalizados deben activarse de forma explícita para cada parámetro del evento que te interese. Una vez que habilites esta opción, Google Analytics para Firebase mostrará tarjetas adicionales para mostrar las estadísticas de los parámetros personalizados.

Para registrar parámetros personalizados en un evento, siga estos pasos:

  1. Ve a Firebase console y selecciona el proyecto Awesome Drawing Quiz que creaste anteriormente.
  2. Haz clic en Eventos en el menú de navegación.
  1. En la fila del evento que deseas modificar, haz clic en 73afe611adf58774.png> Editar informes de parámetros.

aad40de06ee0c3ad.png

  1. En el campo Ingresar nombre del parámetro, ingrese el nombre del parámetro que desea registrar.

Nota: Si no se encuentra ninguna coincidencia, solo ingresa el nombre del parámetro y haz clic en AGREGAR.e066c761aae4797f.png 5. Consulta la siguiente tabla 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 uno de los eventos que se indican 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 informes de parámetros personalizados para el evento level_success:

6d569c8c27df2914.png

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.

d1a37589d54bca6b.png

11. Obtén estadísticas del informe de Evento

Como agregaste algunos eventos en el juego, deberías poder responder las preguntas sobre el comportamiento del usuario en el juego. A continuación, se incluyen 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 en cada nivel.

Haz clic en el ícono level_wrong_answer del informe de eventos. En el informe del evento level_wrong_answer, busca la tarjeta level_name. Verás los valores asociados al parámetro level_name en esa tarjeta de la siguiente manera.

25da426bbc0c612c.png

Según la captura de pantalla anterior, puedes ver fácilmente que el horizonte 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 se realizaron para completar un nivel, en promedio?

En el Awesome Drawing Quiz, los usuarios pueden enviar la respuesta a cada nivel tantas veces como quieran.

Como habilitaste la generación de informes de parámetros en el parámetro number_of_attempts del evento level_success, puedes ver las métricas detalladas de ese parámetro.

Haz clic en el evento level_success del informe de eventos. En el informe del evento level_success, busca la tarjeta number_of_attemps. Verás la cantidad promedio de intentos en esa tarjeta de la siguiente manera:

43de290f9f1a0ac9.png

Puedes usar la información que obtengas aquí para optimizar la dificultad promedio del juego. Por ejemplo, si la cantidad promedio de intentos es demasiado cercana a 1, puedes considerar hacer el juego un poco más desafiante.

¿Los usuarios intentaron resolver la pregunta obteniendo una pista, aunque no lograron superar un nivel al final?

Cuando un usuario decide omitir un nivel, se activa un evento level_fail. La decisión del usuario puede deberse a muchos motivos.

Sin embargo, dado que el juego puede darles una pista después de que miren un anuncio de video recompensado, es importante saber si el usuario intentó superar el nivel con la ayuda de la pista, al menos.

Haz clic en el evento level_fail del informe de eventos. En el informe del evento level_fail, busca la tarjeta hint_used. Verás la cantidad promedio de parámetros de eventos hint_used. Ten en cuenta que, cuando se usa una sugerencia, se establece en 1, mientras que, cuando no se usa, se establece en 0.

313814372cd7c8a4.png

Si los números de la tarjeta hint_used se acercan a 0, es una señal de que la recompensa (pista) no es muy atractiva para los usuarios. Además, pierdes la oportunidad de aumentar los ingresos generados por los anuncios de video recompensados.

Por lo tanto, debes considerar que la recompensa sea más útil para los usuarios, de modo que puedan interactuar con el juego de manera más profunda y se puedan aumentar los ingresos de los anuncios de video recompensados.

¿Cuántos niveles se completaron en cada juego, en promedio?

Hay un total de 6 niveles por juego en el Awesome Drawing Quiz. Una vez que el usuario completa seis niveles (sin importar si los superó o no), se activa un evento game_complete con number_of_correct_answers como parámetro.

Dado que number_of_correct_answers indica cuántos niveles completó el usuario (proporcionó 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 del informe de eventos. En el informe del evento game_complete, busca la tarjeta number_of_correct_answers. Verás la cantidad promedio de parámetros de eventos number_of_correct_answers.

d9eeaa019d1bceb4.png

Si la cantidad promedio de niveles completados es demasiado baja, debes considerar reorganizar el juego para ayudar a las personas a superar un nivel y que puedan seguir jugando sin perder el interés.

12. Todo listo

Completaste el codelab de AdMob+Firebase 101 para Unity. Puedes encontrar el código completo de este codelab en la carpeta android_studio_folder.png101-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 las pruebas A/B para optimizar el valor del parámetro en el juego sin actualizar la app.