Primeros pasos con Firebase Performance Monitoring para Android

Esta guía muestra cómo usar Firebase Performance Monitoring con la app. Sigue estos pasos:

  1. Requisitos previos
  2. Agrega Firebase al proyecto de Android
  3. Agrega Performance Monitoring a la app
  4. (Opcional) Define un seguimiento personalizado, y una o más métricas en la app
  5. (Opcional) Agrega la anotación @AddTrace para hacer un seguimiento de métodos específicos
  6. Revisa Firebase console para ver los resultados de Performance Monitoring
  7. Implementa la app y revisa los resultados en Firebase console

Requisitos previos

Antes de comenzar, debes configurar lo siguiente en el entorno:

  • Un dispositivo que ejecute Android 4.1 (Jelly Bean) o versiones posteriores, y Servicios de Google Play 16.2.4 o versiones posteriores
  • El SDK de Servicios de Google Play del Repositorio de Google, disponible en Android SDK Manager
  • La versión más reciente de Android Studio, versión 2.2 o una posterior

Agrega Firebase al proyecto de Android

Si estás usando otras funciones de Firebase, puedes agregar Firebase a la app desde Android Studio con Firebase Assistant.

Para abrir Firebase Assistant en Android Studio, haz lo siguiente:

  1. Haz clic en Herramientas > Firebase para abrir la ventana de Assistant.
  2. Haz clic para expandir una de las funciones enumeradas (por ejemplo, Analytics) y haz clic en el vínculo del instructivo proporcionado (por ejemplo, Registra un evento de Analytics).
  3. Haz clic en el botón para conectarte a Firebase y agregar el código necesario a la app.

Si no estás usando otras funciones de Firebase en la app, puedes agregar Firebase a la app manualmente.

Agrega Performance Monitoring a la app

  1. Abre el archivo de nivel de proyecto build.gradle y agrega lo siguiente:
    1. En la sección buildscript -> repositories:
      jcenter()
    2. En la sección buildscript -> dependencies, agrega la dependencia de Firebase:
      • Para Android Studio 2.x:
        classpath 'com.google.firebase:firebase-plugins:1.1.1'
      • Para Android Studio 3.x:
        classpath 'com.google.firebase:firebase-plugins:1.1.5'
  2. Abre el archivo de nivel de la app build.gradle y agrega lo siguiente:
    1. Debajo de apply plugin: 'com.android.application', agrega la siguiente línea:
      apply plugin: 'com.google.firebase.firebase-perf'
    2. Agrega lo siguiente a la sección dependencies:
      implementation 'com.google.firebase:firebase-perf:16.2.4'
  3. Vuelve a compilar la app. Ahora se supervisarán los seguimientos automáticos y las solicitudes de red HTTP/S.

(Opcional) Define un seguimiento personalizado, y una o más métricas en la app

Un seguimiento personalizado es un informe de los datos de rendimiento asociados con parte del código de la app. Para obtener más información sobre los seguimientos personalizados, consulta la descripción general de Performance Monitoring. Puedes configurar varios seguimientos personalizados en la app y es posible ejecutar más de uno al mismo tiempo. Cada seguimiento personalizado puede tener una o más métricas para contar eventos relacionados con el rendimiento en la app. Estas métricas están asociadas con los seguimientos que las crean.

  1. Importa estas clases de Performance Monitoring en la parte superior del archivo .java o .kt, como en este ejemplo:

    Android

    import com.google.firebase.perf.FirebasePerformance;
    import com.google.firebase.perf.metrics.Trace;
  2. Antes del código donde quieres iniciar un seguimiento en la app, agrega la siguiente línea de código para iniciar un seguimiento llamado test_trace, como en estos ejemplos:

    Java
    Android

    Trace myTrace = FirebasePerformance.getInstance().newTrace("test_trace");
    myTrace.start();

    Kotlin
    Android

    val myTrace = FirebasePerformance.getInstance().newTrace("test_trace")
    myTrace.start()
  3. Para contar los eventos relacionados con el rendimiento que se producen en la app (como los aciertos y los errores de caché), agrega una línea de código similar a la siguiente cada vez que se produzca el evento, con una string que no sea item_cache_hit ni item_cache_miss para nombrar ese evento si estás contando un tipo de evento diferente:

    Java
    Android

    Item item = cache.fetch("item");
    if (item != null) {
        myTrace.incrementMetric("item_cache_hit", 1);
    } else {
        myTrace.incrementMetric("item_cache_miss", 1);
    }

    Kotlin
    Android

    val item = cache.fetch("item")
    if (item != null) {
        myTrace.incrementMetric("item_cache_hit", 1)
    } else {
        myTrace.incrementMetric("item_cache_miss", 1)
    }
  4. Después del código donde deseas detener el seguimiento, agrega la siguiente línea:

    Java
    Android

    myTrace.stop();

    Kotlin
    Android

    myTrace.stop()

(Opcional) Agrega la anotación @AddTrace para hacer un seguimiento de métodos específicos

Puedes agregar la anotación @AddTrace a los métodos de la app y proporcionar una string para identificar el seguimiento resultante. Esto hace que un seguimiento comience al principio de este método y se detenga cuando se completa el método. Los seguimientos creados de esta manera no tienen métricas disponibles.

Por ejemplo, para crear un seguimiento llamado onCreateTrace que se ejecute cuando se llame el método onCreate(), usa un código similar al siguiente:

Java
Android

@Override
@AddTrace(name = "onCreateTrace", enabled = true /* optional */)
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

Kotlin
Android

@AddTrace(name = "onCreateTrace", enabled = true /* optional */)
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
}

Revisa Firebase console para obtener resultados de Performance Monitoring

  1. Crea la app en Android Studio.
  2. Prueba la app mediante un emulador de Android con una imagen reciente y los Servicios de Google Play versión 15.0.0 o una más reciente, o con un dispositivo de prueba con los Servicios de Google Play versión 15.0.0 o posterior.
  3. Comprueba que los resultados de Performance Monitoring aparezcan en Firebase console. Deberían aparecer en un plazo de 12 horas.

Implementa la app y revisa los resultados en Firebase console

Una vez que hayas validado Performance Monitoring con uno o más dispositivos de prueba, puedes implementar la versión actualizada de la app para los usuarios y usar Firebase console para supervisar los datos de rendimiento.

(Opcional) Agrega supervisión para solicitudes de red específicas

Performance Monitoring recopila las solicitudes de red automáticamente. Si bien esto incluye la mayoría de las solicitudes de red para la app, es posible que no se informen todos los casos. Para incluir solicitudes de red específicas en Performance Monitoring, agrega el siguiente código a la app:

Java
Android

HttpMetric metric =
        FirebasePerformance.getInstance().newHttpMetric("https://www.google.com",
                FirebasePerformance.HttpMethod.GET);
final URL url = new URL("https://www.google.com");
metric.start();
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json");
try {
    DataOutputStream outputStream = new DataOutputStream(conn.getOutputStream());
    outputStream.write(data);
} catch (IOException ignored) {
}
metric.setRequestPayloadSize(data.length);
metric.setHttpResponseCode(conn.getResponseCode());
printStreamContent(conn.getInputStream());

conn.disconnect();
metric.stop();

Kotlin
Android

val metric = FirebasePerformance.getInstance().newHttpMetric("https://www.google.com",
        FirebasePerformance.HttpMethod.GET)
val url = URL("https://www.google.com")
metric.start()
val conn = url.openConnection() as HttpURLConnection
conn.doOutput = true
conn.setRequestProperty("Content-Type", "application/json")
try {
    val outputStream = DataOutputStream(conn.outputStream)
    outputStream.write(data)
} catch (ignored: IOException) {
}

metric.setRequestPayloadSize(data.size.toLong())
metric.setHttpResponseCode(conn.responseCode)
printStreamContent(conn.inputStream)

conn.disconnect()
metric.stop()

Las solicitudes de red HTTP/s que capturas específicamente de esta manera aparecen en Firebase console junto con las solicitudes de red que Performance Monitoring captura automáticamente.

(Opcional) Revisa una muestra de solicitudes de red y seguimientos

Puedes ver en detalle algunos segmentos de solicitudes de red o seguimientos específicos en Firebase console. En una muestra aleatoria de sesiones grabadas, se muestra la siguiente información:

una imagen de la página de sesiones de Firebase Performance Monitoring

  • CPU: El SDK de Performance Monitoring registra cuánto tiempo de usuario y de sistema consume la app.
  • Memoria: El SDK de Performance Monitoring registra cuánta memoria del heap usa la app. La memoria del heap es la que se usa para asignaciones dinámicas, incluidos los objetos que se creen, los que se liberen y los que la app use de forma activa.
  • Información individual: Información detallada sobre una sola instancia de la solicitud de red o seguimiento, incluida la hora de inicio y de finalización, la duración y el tamaño de la solicitud y de la respuesta.
  • Instancias simultáneas: Información sobre las solicitudes de red o seguimiento que ocurrieron al mismo tiempo.
  • Atributos del dispositivo: Información sobre el dispositivo, incluida la versión de la app, el modelo, la versión de SO, la radio y los atributos personalizados.

Para ver estos detalles en Firebase console, abre una de las solicitudes de red o seguimiento de la app y haz clic en Ver sesiones. También puedes hacer clic en el vínculo de las sesiones de un atributo en específico.

una imagen del seguimiento de Firebase Performance Monitoring con un vínculo a las sesiones

Los datos de las sesiones que recopila Performance Monitoring se distribuyen en percentiles para cada métrica. Las sesiones de los rangos percentiles más bajos tienen un valor menor para la métrica que las sesiones de los percentiles más altos. Si deseas filtrar las sesiones disponibles por percentil, usa la lista desplegable que se encuentra arriba de los detalles de las sesiones.

una imagen de la página de sesiones de Firebase Performance Monitoring

Problemas conocidos

  • La versión 1.1.0 del complemento de Firebase puede causar un desajuste en las dependencias de Guava, lo que genera el siguiente error:

    Error:Execution failed for task ':app:packageInstantRunResourcesDebug'.
    > com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;

    Si ves este error, actualiza a la versión 1.1.1 o reemplaza la declaración classpath que se mostró antes por lo siguiente en la sección buildscript ->dependencies del archivo build.gradle en el nivel del proyecto:

    classpath ('com.google.firebase:firebase-plugins:1.1.0') {
                exclude group: 'com.google.guava', module: 'guava-jdk5'
    }
  • Performance Monitoring solo admite la supervisión de las solicitudes de red HTTP/S que se realizan con la versión 3.x.x de un cliente HTTP OkHttp.
  • Performance Monitoring informa el tamaño total de la carga útil para las solicitudes de red HTTP/S según el valor configurado en el encabezado de longitud de contenido de HTTP. Es posible que este valor no siempre sea exacto.
  • Performance Monitoring solo admite el proceso principal en las apps de Android de varios procesos.
  • El complemento para Gradle com.google.firebase.firebase-perf no es compatible con DexGuard, por lo que se inhabilitan los seguimientos automáticos y la supervisión de las solicitudes de red HTTP/S. Los seguimientos personalizados agregados con el SDK se comportan normalmente si la app usa DexGuard.
  • El complemento de Gradle com.google.firebase.firebase-perf no es compatible con Jack, que está obsoleto.

Depuración de la integración

Puedes habilitar el registro de depuración de Performance Monitoring durante la compilación. Para ello, agrega un elemento <meta-data> al elemento <application> del archivo AndroidManifest.xml de la app, de la siguiente forma:

<meta-data
  android:name="firebase_performance_logcat_enabled"
  android:value="true" />

Puedes ver el registro de solicitudes de red HTTP/S y Trace mediante el filtro de logcat. Los mensajes de registro de Performance Monitoring tienen la etiqueta FirebasePerformance y se pueden filtrar con el siguiente comando:

adb logcat -s FirebasePerformance

Próximos pasos