Analytics con Firebase

12 minuto(s) de lectura

Toda la información oficial de Firebase la pueden encontrar aquí.

El código completo para este Post lo pueden encontrar en Github

Necesitan seguir los pasos en el Post de Introducción a Firebase para poder comenzar a utilizar Analytics.

Introducción

Analytics nos permite conocer cómo nuestros usuarios interactúan con la app. También nos permite tener reportes de fallas y excepciones así cómo nos provee de filtros para poder visualizar la información generada por nuestros usuarios de diferentes maneras. En este Post aprenderemos cómo utilizar Firebase para agregar Analytics a nuestra aplicación.

Agregando Analytics

Después de seguir los pasos en el Post de Introducción a Firebase, ya tenemos lo necesario para utilizar Analytics, ya que Analytics viene incluido en la dependencia principal de Firebase, la cual pueden encontrar en el archivo gradle de la app:

compile 'com.google.firebase:firebase-core:9.8.0'

Para que Analytics funcione, necesitamos agregar los siguientes permisos en el Manifest:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

Firebase nos permite tener registro de dos tipos:

  • Eventos
  • Propiedades de usuario

Eventos

Un evento es alguna acción de importancia que ocurre dentro de nuestra aplicación, la cual quisiéramos medir y analizar. Por ejemplo, quisiéramos saber cuando un usuario compra algún objeto desde nuestra app, cuando inicia sesión, cuando instala o desinstala la app, o alguna opción que seleccionó.

Firebase nos permite enviar hasta 500 eventos diferentes desde nuestra aplicación. También nos provee algunos eventos predefinidos que podemos utilizar, aunque también podemos enviar nuestros propios eventos. A cada evento se le pueden agregar hasta 25 parámetros por evento.

Eventos enviados por defecto

Al agregar Firebase se tiene el registro de algunos eventos sin necesidad de agregar ningún código.

  • first_open: este evento nos indica la primera vez que un usuario abre nuestra app después de instalarla o reinstalarla.
  • in_app_purchase: este evento nos indica cuando un usuario termina una compra dentro de la aplicación utilizando Google Play Store. Se envían los siguientes parámetros: ID del producto, nombre del producto, la moneda de la compra y la cantidad de productos comprados.
  • user_engagement: este evento nos indica cuando el usuario tiene la app abierta y está interactuando con ella.
  • session_start: se envía cuando un usuario usa la app por más de un tiempo mínimo (que se puede asignar en la app, y que por default es 10 segundos) después de un tiempo de inactividad (que es 30 minutos por defecto y también se puede asignar).
  • app_update: se envía cuando la app es actualizada. Se envía el ID de la versión anterior de la app.
  • app_remove: se envía cuando se ha desinstalado la app.
  • os_update: se envía cuando se ha actualizado el sistema operativo. Se envía el ID de la versión anterior del S.O.
  • app_clear_data: nos indica cuando el usuario borra toda la información de la app.
  • app_exception: nos indica cuando ha habido alguna excepción en nuestra app.
  • notification_foreground: se envía cuando se recibe una notificación por medio de Firebase y la app está siendo utilizada.
  • notification_receive: nos indica cuando se recibe una notificación por medio de FIrebase y la app está en background.
  • notification_open: nos indica cuando el usuario abre una notificación enviada por medio de Firebase.
  • notification_dismiss: nos indica cuando el usuario quita la notificación enviada por Firebase.
  • dynamic_link_first_open: nos indica cuando un usuario abre la app por primera vez utilizando un link dinámico.
  • dynamic_link_app_open: se envía cuando el usuario abre la app con un link dinámico.
  • dynamic_link_app_update: nos indica cuando el usuario actualiza la app utilizando un link dinámico.

Enviar Eventos

Firebase nos proporciona algunas constantes de eventos comunes para la mayoría de las apps, para apps de ventas y comercio, para apps de viaje y para juegos. También nos proporciona algunas constantes para pasar como parámetros de eventos. Pueden ver la lista de eventos y parámetros que nos proporciona Firebase al final del post. De igual manera, podemos crear nuestros propios eventos con nuestros propios parámetros.

En este post agregaremos dos botones y pondremos un evento a cada uno.

En nuestro layout agregamos dos botones:

<Button
    android:id="@+id/boton_compra"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/evento_compra" />

<Button
    android:id="@+id/boton_personalizado"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/analytics_personalizado" />

Con el primer botón utilizaremos las constantes que nos proporciona Firebase. Con el segundo botón utilizaremos nuestros propios valores para el evento y sus parámetros.

Para enviar nuestros propios eventos, necesitamos una instancia de FirebaseAnalytics. Agregamos este código en nuestra actividad:

private FirebaseAnalytics analyticsFirebase;

analyticsFirebase = FirebaseAnalytics.getInstance(this);

Inicializamos las vistas y agregamos un OnClickListener() a cada botón.

private void inicializarVistas() {
    Button botonCompra = (Button) findViewById(R.id.boton_compra);
    botonCompra.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            analyticsCompra();
        }
    });

    Button botonPersonalizado = (Button) findViewById(R.id.boton_personalizado);
    botonPersonalizado.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            analyticsPersonalizado();
        }
    });
}

Los parámetros de nuestro evento se agregan en un Bundle y utilizamos el método de analyticsFirebase.logEvent(evento, parámetros) para enviarlo.

El método analyticsCompra() que utiliza las constantes de Firebase quedaría de la siguiente manera:

private void analyticsCompra() {
    Bundle bundle = new Bundle();
    bundle.putString(FirebaseAnalytics.Param.CURRENCY, "MXN");
    bundle.putDouble(FirebaseAnalytics.Param.VALUE, 50.0);
    bundle.putString(FirebaseAnalytics.Param.TRANSACTION_ID, "compra2x1");
    analyticsFirebase.logEvent(FirebaseAnalytics.Event.ECOMMERCE_PURCHASE, bundle);
}

El método analyticsPersonalizado() que utiliza nuestros propios eventos y parámetros, quedaría de la siguiente manera:

private void analyticsPersonalizado() {
    Bundle bundle = new Bundle();
    Random random = new Random(System.currentTimeMillis());
    bundle.putDouble(FirebaseAnalytics.Param.VALUE, random.nextInt(100));
    bundle.putString(FirebaseAnalytics.Param.ITEM_CATEGORY, "prueba");
    analyticsFirebase.logEvent("analytics_prueba", bundle);
}

Al ejecutar nuestra app y presionar los botones, se generan los eventos. Estos eventos los podemos ver en la consola de Firebase en nuestra aplicación. En el menú principal seleccionamos Analytics y entramos a la pestaña de Eventos. Los eventos pueden tardar un tiempo en aparecer en la consola.

Eventos en la consola de Firebase

En esta imagen también podemos observar los eventos que Firebase registra automáticamente, como lo son app_remove, first_open y session_start.

Propiedades de usuario

Las propiedades de usuario son atributos que nos permiten filtar la información para identificar los segmentos de personas que utilizan nuestra app.

Al igual que con los Eventos, Firebase registra automáticamente algunas propiedades de usuario. Es importante mencionar que Firebase obtiene algunas de estas propiedades automáticas del ID de publicidad de Android, por lo que si no se ha configurado este ID, no se tendrán algunas de las propiedades.

Estas son las propiedades que se registran automáticamente:

  • Age: identifica a los usuarios en 6 grupos: 18-24, 25-34, 35-44, 45-54, 55-64 y 65+.
  • App Store: es la tienda de la cual se bajó la app.
  • App Version: identifica el versionName de la app.
  • Country: el país donde se encuentra el usuario.
  • Device Brand: la marca del teléfono en donde se instaló la app.
  • Device Category: la categoría del dispositivo móvil (tablet, celular).
  • Device Model: el nombre del modelo del dispositivo.
  • First Open Time: la hora en microsegundos a la cual se abrió la app por primera vez.
  • Gender: género del usuario de la app.
  • Interests: intereses del usuario de la app.
  • Language: el idioma en el que está el dispositivo.
  • New/Established: tipo de usuario; new: abrió la app hace menos de 7 días; established: abrió la app por primera vez hace más de 7 días.
  • OS Version: la versión del sistema operativo.

Podemos observar algunas de estas propiedades en el Panel de Control de Analytics en la consola de Firebase.

Propiedades de Usuario en la consola de Firebase

También podemos crear nuestras propias propiedades de usuario. En el Panel de Control de Analytics seleccionamos la pestaña de Propiedades de Usuario, después presionamos el botón Nueva Propiedad de Usuario.

Creación de propiedades de usuario.

Necesitamos nombrar nuestra propiedad de usuario y ponerle una breve descripción.

Creación de propiedades de usuario.

De regreso en nuestro código, vamos a agregar un nuevo botón para reportar el grupo favorito del usuario, utilizando esta nueva propiedad.

<Button
    android:id="@+id/boton_propiedad_usuario"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/grupo_fav" />

Inicializamos nuestro botón y le agregamos su OnClickListener().

Button botonPropiedadUsuario = (Button) findViewById(R.id.boton_propiedad_usuario);
botonPropiedadUsuario.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        propiedadUsuario();
    }
});

Para enviar una propiedad de usuario, utilizamos el método analyticsFirebase.setUserProperty(propiedad, valor).

Vamos a tener un arreglo con tres grupos musicales y mandar uno de manera aleatoria al presionar el botón.

private String[] grupos = new String[] { "The Beatles", "Pink Floyd", "Led Zeppelin" };

El método propiedadUsuario() quedaría de la siguiente manera:

private void propiedadUsuario() {
    Random random = new Random(System.currentTimeMillis());
    String grupoFavorito = grupos[random.nextInt(3)];
    analyticsFirebase.setUserProperty("grupo_favorito", grupoFavorito);
}

Después de algunas horas, esta propiedad de usuario se puede utilizar en la consola para filtar la información:

Utilizando propiedades de usuario.

Constantes de Eventos y Parámetros Proporcionados por Firebase

Esta es la lista de las constantes de Eventys y Parámetros que Firebase nos proporciona.

ADD_PAYMENT_INFO

Este evento nos indica que el usuario agregó información de pago a la app. No tiene parámetros.

ADD_TO_CART

Este evento nos indica que se agregó un elemento al carrito de compras. Le pueden agregar los siguientes parámetros:

Parámetros necesarios

  • ITEM_ID (String): identificador del producto.
  • ITEM_NAME (String): nombre del producto.
  • ITEM_CATEGORY (String): categoría del producto.
  • QUANTITY (long): cantidad de elementos.

Parámetros opcionales:

  • PRICE (double): precio del elemento.
  • VALUE (double): valor del elemento.
  • CURRENCY (String): moneda en la que está el precio.
  • ORIGIN (String): procedencia del producto.
  • ITEM_LOCATION_ID (String): ID de Google Place del origen del producto.
  • DESTINATION (String): Destino del producto.
  • START_DATE (String): fecha de inicio del producto (puede ser de alguna oferta, o desde cuando está a la venta) en formato YYYY-MM-DD.
  • END_DATE (String): fecha de fin del producto (cuando termina la oferta, cuando se dejará de vender el producto) en formato YYYY-MM-DD.

ADD_TO_WISHLIST

Evento que se genera cuando se agregar un producto a una lista de deseos.

Parámetros necesarios:

  • ITEM_ID (String): identificador del producto.
  • ITEM_NAME (String): nombre del producto.
  • ITEM_CATEGORY (String): categoría del producto.
  • QUANTITY (long): cantidad de elementos.

Parámetros opcionales:

  • PRICE (double): precio del elemento.
  • VALUE (double): valor del elemento.
  • CURRENCY (String): moneda en la que está el precio.
  • ITEM_LOCATION_ID (String): ID de Google Place del origen del producto.

APP_OPEN

Evento que se genera al abrir la app.

BEGIN_CHECKOUT

Evento al comenzar con el checkout para realizar una compra.

Parámetros opcionales:

  • VALUE (double): valor del elemento (precio).
  • CURRENCY (String): moneda en la que está el precio.
  • TRANSACTION_ID (String): ID de la transacción a generar.
  • NUMBER_OF_NIGHTS (long): número de noches para reservaciones de hotel.
  • NUMBER_OF_ROOMS (long): número de cuartos en reservaciones de hotel.
  • NUMBER_OF_PASSENGERS (long): número de pasajeros en viajes.
  • ORIGIN (String): origen del viaje o del producto.
  • DESTINATION (String): destino del viaje o del producto.
  • START_DATE (String): fecha de inicio para el viaje, en formato YYYY-MM-DD.
  • END_DATE (String): fecha de fin del viaje, en formato YYYY-MM-DD.
  • TRAVEL_CLASS (String): clase del vuelo (económico, business, etc).

EARN_VIRTUAL_CURRENCY

Evento cuando el usuario obtiene moneda virtual. (como en juegos o promociones en compras).

Parámetros necesarios:

  • VIRTUAL_CURRENCY_NAME (String): nombre de la moneda virtual en tu app.
  • VALUE (double): cantidad de moneda virtual obtenida.

ECOMMERCE_PURCHASE

Evento cuando un usuario ha hecho una compra desde tu app.

Parámetros opcionales:

  • CURRENCY (String): moneda en la que se realizó la compra.
  • VALUE (double): valor de la compra.
  • TRANSACTION_ID (String): ID de la transacción realizada.
  • TAX (double): impuesto del total de la compra.
  • SHIPPING (double): costo del envío.
  • COUPON (String): código de un cupón de oferta utilizado en la compra.
  • LOCATION (String): ID de Google Place, o tu propio ID del lugar de la compra.
  • NUMBER_OF_NIGHTS (long): número de noches reservadas.
  • NUMBER_OF_ROOMS (long): número de cuartos reservados.
  • NUMBER_OF_PASSENGERS (long): número de pasajeros en el viaje.
  • ORIGIN (String): origen del viaje comprado.
  • DESTINATION (String): destino del viaje comprado.
  • START_DATE (String): fecha del viaje.
  • END_DATE (String); fecha del viaje de regreso.
  • TRAVEL_CLASS (String): clase del vuelo (económico, business, etc).

JOIN_GROUP

Evento cuando el usuario se une a un grupo.

Parámetros necesarios:

  • GROUP_ID (String): ID del grupo al que se unió el usuario.

LEVEL_UP

Evento que indica que el usuario subió de nivel.

Parámetros necesarios:

  • LEVEL (long): nivel al que subió el usuario.

Parámetros opcionales:

  • CHARACTER (String): personaje del usuario.

LOGIN

Evento que indica que el usuario inició sesión.

POST_SCORE

Evento que indica cuando el usuario obtuvo un puntaje.

Parámetros necesarios:

  • SCORE (long): puntaje obtenido.
  • LEVEL (long): nivel en el que se obtuvo el puntaje.

Parámetros opcionales:

  • CHARACTER (String): personaje del usuario.

PRESENT_OFFER

Evento que indica que se le presentó una oferta al usuario.

Parámetros necesarios:

  • ITEM_ID (String): identificador de la oferta.
  • ITEM_NAME (String): nombre de la oferta.
  • ITEM_CATEGORY (String): categoría de la oferta.
  • QUANTITY (long): cantidad de elementos en la oferta.

Parámetros opcionales:

  • PRICE (double): precio del elemento.
  • VALUE (double): valor del elemento.
  • CURRENCY (String): moneda en la que está el precio.
  • ORIGIN (String): procedencia del producto.
  • ITEM_LOCATION_ID (String): ID de Google Place del origen del producto.

PURCHASE_REFUND

Evento que indica que se hizo la devolución de un producto.

Parámetros opcionales:

  • CURRENCY (String): moneda en la que está el precio.
  • VALUE (double): valor del elemento.
  • TRANSACTION_ID (String): ID de la transacción a generar.

Indica que se realizó una búsqueda, así como algunos parámetros de la misma.

Parámetros necesarios:

  • SEARCH_TERM (String): término de búsqueda.

Parámetros opcionales:

  • NUMBER_OF_NIGHTS (long): número de noches para reservaciones de hotel.
  • NUMBER_OF_ROOMS (long): número de cuartos en reservaciones de hotel.
  • NUMBER_OF_PASSENGERS (long): número de pasajeros en viajes.
  • ORIGIN (String): origen del viaje o del producto.
  • DESTINATION (String): destino del viaje o del producto.
  • START_DATE (String): fecha de inicio para el viaje, en formato YYYY-MM-DD.
  • END_DATE (String): fecha de fin del viaje, en formato YYYY-MM-DD.
  • TRAVEL_CLASS (String): clase del vuelo (económico, business, etc).

SELECT_CONTENT

Evento que indica que el usuario ha seleccionado algún elemento en tu app. Puede ser cualquier objeto de tu app.

Parámetros necesarios:

  • CONTENT_TYPE (String): Tipo de elemento seleccionado.
  • ITEM_ID (String): identificador del producto.

SHARE

Evento que indica cuando un usuario comparte algo.

Parámetros necesarios:

  • CONTENT_TYPE (String): Tipo de elemento seleccionado.
  • ITEM_ID (String): identificador del producto.

SIGN_UP

Evento que indica cuando el usuario se registra en tu app.

Parámetros necesarios:

  • SIGN_UP_METHOD (String): método que utilizó el usuario para iniciar sesión.

SPEND_VIRTUAL_CURRENCY

Evento que indica que se gastó moneda virtual en la app.

Parámetros necesarios:

  • ITEM_NAME (String): nombre del producto.
  • VIRTUAL_CURRENCY_NAME (String): nombre de la moneda virtual en tu app.
  • VALUE (double): cantidad de moneda virtual gastada.

TUTORIAL_BEGIN

Evento que indica que ha iniciado el tutorial en tu app.

TUTORIAL_COMPLETE

Evento que indica que el usuario terminó el tutorial.

UNLOCK_ACHIEVEMENT

Evento que indica que el usuario ha desbloqueado un logro en el juego.

Parámetros necesarios:

  • ACHIEVEMENT_ID (String): ID del logro desbloquado.

VIEW_ITEM

Evento que indica que se ha mostrado algún elemento al usuario.

Parámetros necesarios:

  • ITEM_ID (String): identificador del producto.
  • ITEM_NAME (String): nombre del producto.
  • ITEM_CATEGORY (String): categoría del producto.

Parámetros opcionales:

  • ITEM_LOCATION_ID (String): ID de Google Place del origen del producto mostrado.
  • PRICE (double): precio del elemento mostrado.
  • QUANTITY (long): cantidad de elementos mostrados.
  • CURRENCY (String): moneda en la que está el precio mostrado.
  • VALUE (double): valor del elemento mostrado.
  • FLIGHT_NUMBER (String): número de vuelo mostrado.
  • NUMBER_OF_NIGHTS (long): número de noches para reservaciones de hotel.
  • NUMBER_OF_ROOMS (long): número de cuartos en reservaciones de hotel.
  • NUMBER_OF_PASSENGERS (long): número de pasajeros en viajes.
  • ORIGIN (String): procedencia del producto mostrado.
  • DESTINATION (String): Destino del producto mostrado.
  • START_DATE (String): fecha de inicio del producto mostrado en formato YYYY-MM-DD.
  • END_DATE (String): fecha de fin del producto mostrado en formato YYYY-MM-DD.
  • SEARCH_TERM (String): término de búsqueda mostrados.
  • TRAVEL_CLASS (String): clase del vuelo (económico, business, etc).

VIEW_ITEM_LIST

Evento que indica que el usuario ha visto una lista de elementos.

Parámetros necesarios:

  • ITEM_CATEGORY (String): categoría del producto.

VIEW_SEARCH_RESULTS

Evento que indica que el usuario ha obtenido los resultados de su búsqueda.

Parámetros necesarios:

  • SEARCH_TERM (String): término de búsqueda.

Deja un comentario