Seguimiento de sesiones
Aprende a realizar el seguimiento de las sesiones a través del SDK de Braze.

Para los SDK envolventes que no aparecen en la lista, utiliza el método nativo de Android o Swift correspondiente.
Acerca del ciclo de vida de la sesión
Una sesión se refiere al período de tiempo durante el cual el SDK de Braze realiza el seguimiento de la actividad de los usuarios en tu aplicación después de su inicio. También puedes forzar una nueva sesión llamando alchangeUser()método .
De forma predeterminada, una sesión comienza cuando llamas por primera vez a braze.openSession(). La sesión permanecerá activa durante un máximo de30 minutos de inactividad (a menos que cambies el tiempo de espera predeterminado de la sesión o que el usuario cierre la aplicación).

Si has configurado la devolución de llamada del ciclo de](/docs/es/developer_guide/platform_integration_guides/android/initial_sdk_setup/android_sdk_integration/#step-4-tracking-user-sessions-in-android) vida de la actividad para Android, Braze llamará automáticamente aopenSession() ycloseSession() para cada actividad de tu aplicación.
De forma predeterminada, una sesión comienza cuandoopenSession()se llama por primera vez a . Si tu aplicación pasa a segundo plano y luego vuelve al primer plano, el SDK comprobará si han pasado más de 10 segundos desde que se inició la sesión (a menos que cambies el tiempo de espera predeterminado de la sesión). Si es así, comenzará una nueva sesión. Ten en cuenta que si el usuario cierra tu aplicación mientras está en segundo plano, es posible que los datos de la sesión no se envíen a Braze hasta que vuelva a abrir la aplicación.
Llamar nocloseSession() terminará inmediatamente la sesión. En su lugar, finalizará la sesión tras 10 segundos si el usuarioopenSession() no vuelve a llamar a iniciando otra actividad.
De forma predeterminada, una sesión comienza cuando llamas a Braze.init(configuration:). Esto ocurre cuando se desencadena laUIApplicationWillEnterForegroundNotificationnotificación, lo que significa que la aplicación ha pasado a primer plano.
Si tu aplicación pasa a segundo plano,UIApplicationDidEnterBackgroundNotification se desencadena. La aplicación no permanece en una sesión activa mientras está en segundo plano. Cuando tu aplicación vuelve al primer plano, el SDK compara el tiempo transcurrido desde el inicio de la sesión con el tiempo de espera de la sesión (a menos que cambies el tiempo de espera predeterminado). Si el tiempo transcurrido desde el inicio de la sesión supera el periodo de tiempo de espera, se inicia una nueva sesión.
Definición de la inactividad
Entender cómo se define y mide la inactividad es clave para gestionar eficazmente los ciclos de vida de las sesiones en el SDK Web. La inactividad se refiere a un periodo durante el cual el SDK Web de Braze no detecta ningún evento rastreado por parte del usuario.
Cómo se mide la inactividad
El SDK Web rastrea la inactividad en función de los eventos rastreados por el SDK. El SDK mantiene un temporizador interno que se reinicia cada vez que se envía un evento rastreado. Si no se producen eventos rastreados por el SDK dentro del periodo de tiempo de espera configurado, la sesión se considera inactiva y finaliza.
Para más información sobre cómo se implementa el ciclo de vida de la sesión en el SDK Web, consulta el código fuente de gestión de sesiones en el repositorio de GitHub del SDK Web de Braze.
Qué cuenta como actividad de forma predeterminada:
- Abrir o actualizar la aplicación web
- Interactuar con elementos de la interfaz impulsados por Braze (como In-App Messages o Content Cards)
- Llamar a métodos del SDK que envían eventos rastreados (como eventos personalizados o actualizaciones de atributos de usuario)
Qué no cuenta como actividad de forma predeterminada:
- Cambiar a una pestaña diferente del navegador
- Minimizar la ventana del navegador
- Eventos de enfoque o desenfoque del navegador
- Desplazamiento o movimientos del ratón en la página

El SDK Web no rastrea automáticamente los cambios de visibilidad del navegador, el cambio de pestañas ni el enfoque del usuario. Sin embargo, puedes rastrear estas interacciones a nivel de navegador implementando listeners de eventos personalizados mediante la API de visibilidad de página del navegador y enviando eventos personalizados a Braze. Para ver un ejemplo de implementación, consulta Seguimiento de inactividad personalizada.
Configuración del tiempo de espera de la sesión
De forma predeterminada, el SDK Web considera una sesión inactiva después de 30 minutos sin ningún evento rastreado. Puedes personalizar este umbral al inicializar el SDK utilizando el parámetro sessionTimeoutInSeconds. Para más información sobre cómo configurar este parámetro, incluidos ejemplos de código, consulta Cambiar el tiempo de espera predeterminado de la sesión.
Ejemplo: comprensión de los escenarios de inactividad
Considera el siguiente escenario:
- Un usuario abre tu sitio web y el SDK inicia una sesión llamando a
braze.openSession(). - El usuario cambia a una pestaña diferente del navegador para ver otro sitio web durante 30 minutos.
- Durante este tiempo, no se producen eventos rastreados por el SDK en tu sitio web.
- Después de 30 minutos de inactividad, la sesión finaliza automáticamente.
- Cuando el usuario vuelve a la pestaña de tu sitio web y desencadena un evento del SDK (como ver una página o interactuar con el contenido), comienza una nueva sesión.
Seguimiento de inactividad personalizada
Si necesitas rastrear la inactividad basándote en la visibilidad del navegador o en el cambio de pestañas, implementa listeners de eventos personalizados en tu código JavaScript. Utiliza eventos del navegador como visibilitychange para detectar cuándo los usuarios abandonan tu página, y envía manualmente eventos personalizados a Braze o llama a braze.openSession() cuando sea apropiado.
1
2
3
4
5
6
7
8
9
10
11
// Example: Track when user switches away from tab
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
// User switched away - optionally log a custom event
braze.logCustomEvent('tab_hidden');
} else {
// User returned - optionally start a new session and/or log an event
// braze.openSession();
braze.logCustomEvent('tab_visible');
}
});
Para más información sobre cómo registrar eventos personalizados, consulta Registrar eventos personalizados. Para más detalles sobre el ciclo de vida de la sesión y la configuración del tiempo de espera, consulta Cambiar el tiempo de espera predeterminado de la sesión.
Suscripción a actualizaciones de sesión
Paso 1: Suscríbete a las actualizaciones
Para suscribirte a las actualizaciones de sesión, utiliza el método subscribeToSessionUpdates().
Actualmente, la suscripción a actualizaciones de sesión no es compatible con el SDK de Braze para Web.
1
2
3
4
5
6
7
8
Braze.getInstance(this).subscribeToSessionUpdates(new IEventSubscriber<SessionStateChangedEvent>() {
@Override
public void trigger(SessionStateChangedEvent message) {
if (message.getEventType() == SessionStateChangedEvent.ChangeType.SESSION_STARTED) {
// A session has just been started
}
}
});
1
2
3
4
5
Braze.getInstance(this).subscribeToSessionUpdates { message ->
if (message.eventType == SessionStateChangedEvent.ChangeType.SESSION_STARTED) {
// A session has just been started
}
}
Si registras una devolución de llamada de fin de sesión, se activa cuando la aplicación vuelve al primer plano. La duración de la sesión se mide desde que la aplicación se abre o pasa al primer plano, hasta que se cierra o pasa a segundo plano.
1
2
3
4
5
6
7
8
9
10
11
// This subscription is maintained through a Braze cancellable, which will observe changes until the subscription is cancelled.
// You must keep a strong reference to the cancellable to keep the subscription active.
// The subscription is canceled either when the cancellable is deinitialized or when you call its `.cancel()` method.
let cancellable = AppDelegate.braze?.subscribeToSessionUpdates { event in
switch event {
case .started(let id):
print("Session \(id) has started")
case .ended(let id):
print("Session \(id) has ended")
}
}
Para suscribirte a un flujo asíncrono, puedes utilizar sessionUpdatesStream en su lugar.
1
2
3
4
5
6
7
8
for await event in braze.sessionUpdatesStream {
switch event {
case .started(let id):
print("Session \(id) has started")
case .ended(let id):
print("Session \(id) has ended")
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// This subscription is maintained through a Braze cancellable, which will observe changes until the subscription is cancelled.
// You must keep a strong reference to the cancellable to keep the subscription active.
// The subscription is canceled either when the cancellable is deinitialized or when you call its `.cancel()` method.
BRZCancellable *cancellable = [AppDelegate.braze subscribeToSessionUpdates:^(BRZSessionEvent * _Nonnull event) {
switch (event.state) {
case BRZSessionStateStarted:
NSLog(@"Session %@ has started", event.sessionId);
break;
case BRZSessionStateEnded:
NSLog(@"Session %@ has ended", event.sessionId);
break;
default:
break;
}
}];
El SDK de React Native no expone un método para suscribirse directamente a las actualizaciones de sesión. El ciclo de vida de la sesión es gestionado por el SDK nativo subyacente, por lo que para suscribirte a las actualizaciones, utiliza el enfoque de la plataforma nativa en la pestaña Android o Swift.
Paso 2: Probar el seguimiento de sesiones (opcional)
Para probar el seguimiento de sesiones, inicia una sesión en tu dispositivo y luego abre el panel de Braze y busca al usuario correspondiente. En su perfil de usuario, selecciona Sessions Overview. Si las métricas se actualizan como se espera, el seguimiento de sesiones funciona correctamente.


Los detalles específicos de la aplicación solo se muestran para los usuarios que han utilizado más de una aplicación.
Cambiar el tiempo de espera predeterminado de la sesión
Puedes cambiar el tiempo que transcurre antes de que una sesión caduque automáticamente.
De forma predeterminada, el tiempo de espera de la sesión está establecido en 30 minutos. Para cambiarlo, pasa la opción sessionTimeoutInSeconds a tu función initialize. Se puede establecer en cualquier número entero mayor o igual que 1.
1
2
// Sets the session timeout to 15 minutes instead of the default 30
braze.initialize('YOUR-API-KEY-HERE', { sessionTimeoutInSeconds: 900 });
De forma predeterminada, el tiempo de espera de la sesión está establecido en 10 segundos. Para cambiarlo, abre tu archivo braze.xml y añade el parámetro com_braze_session_timeout. Se puede establecer en cualquier número entero mayor o igual que 1.
1
2
<!-- Sets the session timeout to 60 seconds. -->
<integer name="com_braze_session_timeout">60</integer>
De forma predeterminada, el tiempo de espera de la sesión está establecido en 10 segundos. Para cambiarlo, configura sessionTimeout en el objeto configuration que se pasa a init(configuration). Se puede establecer en cualquier número entero mayor o igual que 1.
1
2
3
4
5
6
7
8
// Sets the session timeout to 60 seconds
let configuration = Braze.Configuration(
apiKey: "<BRAZE_API_KEY>",
endpoint: "<BRAZE_ENDPOINT>"
)
configuration.sessionTimeout = 60;
let braze = Braze(configuration: configuration)
AppDelegate.braze = braze
1
2
3
4
5
6
7
// Sets the session timeout to 60 seconds
BRZConfiguration *configuration =
[[BRZConfiguration alloc] initWithApiKey:brazeApiKey
endpoint:brazeEndpoint];
configuration.sessionTimeout = 60;
Braze *braze = [[Braze alloc] initWithConfiguration:configuration];
AppDelegate.braze = braze;
El SDK de React Native depende de los SDK nativos para gestionar las sesiones. Para cambiar el tiempo de espera predeterminado de la sesión, configúralo en la capa nativa:
- Android: Configura
com_braze_session_timeouten tu archivobraze.xml. Para obtener más información, selecciona la pestaña Android. - iOS: Configura
sessionTimeouten tu objetoBraze.Configuration. Para obtener más información, selecciona la pestaña Swift.

Si estableces un tiempo de espera para la sesión, toda la semántica de la sesión se ampliará automáticamente hasta el tiempo de espera establecido.
Solución de problemas
El perfil de usuario tiene 0 sesiones
Un perfil de usuario puede tener 0 sesiones si el usuario fue creado fuera del SDK:
- Creado por REST API: Si un usuario se crea a través del endpoint
/users/trackcon unapp_iden la solicitud, el perfil aparece asociado con esa aplicación pero no tiene datos de sesión porque el SDK nunca se inicializó para ese usuario. - Creado por importación CSV: Si un usuario se importa a través de CSV sin valores para los campos de primera o última sesión, el perfil existe con 0 sesiones.
Algunos usuarios no están registrando sesiones
Dado que las sesiones solo se rastrean después de que el SDK se inicializa, los usuarios que no activan la inicialización del SDK no registran ninguna sesión. Esto suele ocurrir cuando tu aplicación utiliza lógica condicional antes de inicializar el SDK, como retrasar la inicialización detrás de un flujo de inicio de sesión, una solicitud de consentimiento o un conmutador de características. Para obtener orientación sobre la implementación, consulta Inicialización retardada. En estos casos, cualquier usuario que no cumpla la condición nunca inicia una sesión.
Si algunos usuarios están registrando sesiones y otros no, verifica lo siguiente:
- Comprueba tu lógica de inicialización. Confirma que el SDK se inicializa para todos los usuarios y puntos de entrada de la aplicación, no solo para algunos.
- Busca cambios recientes en la aplicación. Nueva lógica condicional alrededor de la inicialización del SDK puede causar una caída repentina en el recuento de sesiones.
- Compara usuarios afectados y no afectados. Identifica diferencias en la versión de la aplicación, tipo de dispositivo o flujo de usuario que puedan explicar por qué se omite la inicialización para ciertos usuarios.
Si el problema persiste después de verificar tu implementación, reproduce el problema y recopila la siguiente información antes de contactar con soporte:
- Pasos para reproducir el problema
- La versión de la aplicación afectada
- Registros detallados del SDK, capturados mientras ocurre el problema (o por plataforma: Android, Swift, Web)
- El fragmento de código para la inicialización del SDK
- Un resumen de cualquier lógica condicional aplicada antes de la inicialización