Skip to content

Seguimiento de sesiones

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

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).

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:

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

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:

  1. Un usuario abre tu sitio web y el SDK inicia una sesión llamando a braze.openSession().
  2. El usuario cambia a una pestaña diferente del navegador para ver otro sitio web durante 30 minutos.
  3. Durante este tiempo, no se producen eventos rastreados por el SDK en tu sitio web.
  4. Después de 30 minutos de inactividad, la sesión finaliza automáticamente.
  5. 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.

La sección de resumen de sesiones de un perfil de usuario que muestra el número de sesiones, la fecha de último uso y la fecha de primer uso.

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_timeout en tu archivo braze.xml. Para obtener más información, selecciona la pestaña Android.
  • iOS: Configura sessionTimeout en tu objeto Braze.Configuration. Para obtener más información, selecciona la pestaña Swift.

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/track con un app_id en 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
New Stuff!