---
title: "Rastrear vistas de pantalla de flow en el SDK de Kotlin Multiplatform"
description: "Recibe un evento cada vez que un usuario abre una pantalla de flow en tu app de Kotlin Multiplatform, y reenvíalo a tu analítica de producto."
---

> **AI agents**: to search Adapty docs faster and with fewer tokens, install the Adapty skill. Claude Code (self-updating via plugin): `claude plugin marketplace add adaptyteam/adapty-skills && claude plugin install adapty-skills@adapty` — other tools: `npx skills add adaptyteam/adapty-skills --all`

Cada vez que un usuario abre una pantalla en un [flow](adapty-flow-builder), el SDK reporta un evento `flow_screen_showed` a tu app. Reenvíalo a Amplitude, Mixpanel o cualquier analítica de producto que uses, para analizar las pantallas del flow junto con el resto de los eventos de tu app.

:::tip
Para ver hasta qué punto llegan los usuarios en un flow, no necesitas ningún código — las [métricas de flow](flow-metrics) ya muestran vistas, finalizaciones y abandono por pantalla en el Adapty Dashboard. Usa esta guía cuando necesites esos mismos datos en tu propio sistema de analítica, combinados con eventos que Adapty no conoce.
:::

## Antes de empezar \{#before-you-start\}

Necesitas:

- **Adapty Kotlin Multiplatform SDK v4 o posterior**: El callback de análisis de flows no existe en versiones anteriores.
- **Una versión del flow publicada después de que esta función esté disponible**: Adapty genera los eventos de pantalla al publicar un flow, por lo que un flow publicado antes de este momento no reportará nada. Si no llegan eventos a tu aplicación, publica una nueva versión del flow e inténtalo de nuevo.

## Qué recibes \{#what-you-receive\}

Un flow reporta `flow_screen_showed` cada vez que un usuario abre una de sus pantallas. Adapty contabiliza estos eventos en sus propios análisis de flows y también los envía a tu aplicación, para que puedas construir el mismo embudo en tus propias herramientas de análisis.

| Parámetro        | Descripción                                                                                                                  |
|:-----------------|:---------------------------------------------------------------------------------------------------------------------------------|
| `instanceId`     | El ID de la pantalla que el usuario abrió.                                                                                   |
| `screen_order`   | La posición de la pantalla en el flow.                                                                                       |
| `is_last_screen` | `true` cuando la pantalla no tiene a dónde seguir. Un flow con ramificaciones puede terminar en varias pantallas distintas, y cada una reporta `true`. |

Tanto `isBackendEvent` como `isCustomerEvent` son `true` en este evento: Adapty sigue contabilizándolo y tu aplicación también lo recibe.

Kotlin Multiplatform entrega estos parámetros como una cadena JSON sin procesar, así que decodifica `paramsJsonString` antes de leer cualquiera de ellos.

Las visualizaciones de pantalla llegan al mismo callback de analíticas que el resto de eventos del flow. Consulta [Gestiona eventos de flow y paywall](kmp-handling-events) para saber dónde registrarlo.

## Reenvía cada vista de pantalla a tu análisis \{#forward-every-screen-view-to-your-analytics\}

Comprueba el nombre del evento antes de leer cualquier otra cosa, porque un flow reporta otros eventos a través del mismo callback.

```kotlin showLineNumbers title="Kotlin"
override fun flowViewDidReceiveAnalyticEvent(
    view: AdaptyUIFlowView,
    name: String,
    paramsJsonString: String,
) {
    if (name != "flow_screen_showed") return

    val params = Json.parseToJsonElement(paramsJsonString).jsonObject
    val screenId = params["instanceId"]?.jsonPrimitive?.contentOrNull
    val screenOrder = params["screen_order"]?.jsonPrimitive?.intOrNull

    // Send screenId and screenOrder to your analytics provider here.
}
```

## Ejecuta código cuando el usuario llega al final \{#run-code-when-a-user-reaches-the-end\}

`is_last_screen` es `true` en una pantalla desde la que el flow no puede avanzar. Úsalo para desbloquear contenido, marcar el onboarding como completado o enviar un evento de finalización propio, sin necesidad de añadir una acción de botón en el builder.

```kotlin showLineNumbers title="Kotlin"
override fun flowViewDidReceiveAnalyticEvent(
    view: AdaptyUIFlowView,
    name: String,
    paramsJsonString: String,
) {
    if (name != "flow_screen_showed") return

    val params = Json.parseToJsonElement(paramsJsonString).jsonObject
    if (params["is_last_screen"]?.jsonPrimitive?.booleanOrNull != true) return

    // The user reached the end of the flow.
}
```

Llegar a la última pantalla no es lo mismo que cerrar el flow. Un usuario puede ver la pantalla final y descartar el flow sin hacer nada, y un flow con ramificaciones puede terminar en varias pantallas diferentes. Para saber que el flow en sí ha desaparecido, usa `flowViewDidDisappear` en su lugar.