Compartir a través de


Suspensión de la aplicación para la aplicación de pestaña

Cuando un usuario se aleja de una aplicación, la aplicación se puede suspender o finalizar. Suspensión significa que la aplicación está en segundo plano y no es visible para el usuario. Terminación significa que la aplicación está completamente cerrada y eliminada de la memoria. Suspender una aplicación mejora la hora de inicio posterior de las aplicaciones dentro de Teams u otros productos de Microsoft 365, ya que le permite mantener algunos recursos y recursos en memoria que puede usar al rehidratar la aplicación.

Anteriormente, la suspensión de la aplicación se denominaba aplicación almacenada en caché y solo se admitía en Teams, pero ahora es compatible con las aplicaciones de Teams extendidas para ejecutarse también en otras aplicaciones de Microsoft 365.

En Teams, se admite la suspensión de aplicaciones para los siguientes ámbitos y clientes:

Ámbito   Escritorio iOS Android
Personal ✔️ Duración de la caché: 30 minutos ✔️
Chat ✔️ Duración de la caché: 30 minutos ✔️
Canal ✔️ Duración de la caché: 30 minutos ✔️
Pestaña Reunión ✔️ Duración de la caché: 30 minutos ✔️
Panel lateral de la reunión o aplicaciones en reuniones ✔️ Duración de la caché: 20 minutos

Habilitación de la suspensión de la aplicación

Para habilitar la suspensión de la aplicación, siga estos pasos:

  1. Llame a las API app.lifeCycle.registerBeforeSuspendOrTerminate y app.lifeCycle.registerOnResumeHandler . Estos controladores son necesarios para habilitar la suspensión de la aplicación. Para obtener más información, consulte el módulo de ciclo de vida disponible en la referencia de TeamsJS.

    El app.lifecycle.registerBeforeSuspendOrTerminate controlador le ofrece la oportunidad de realizar algunas tareas antes de que la aplicación se suspenda o finalice, mientras que app.lifecycle.registerOnResumeHandler se llama a cuando un usuario vuelve a la aplicación.

    El registro de ambos controladores permite una aplicación para la suspensión de la aplicación, pero es importante comprender que el registro no garantiza que la aplicación no se termine en segundo plano. La finalización de una aplicación depende de otros factores, como la memoria disponible.

    Nota:

    Anteriormente teamsCore.registerBeforeUnloadHandler y teamsCore.registerOnLoadHandler se usaban para habilitar el almacenamiento en caché de aplicaciones, pero ahora están en desuso.

  2. Use contentUrl y entityId pase al controlador de reanudación para enrutar a la página correcta dentro de la aplicación e invocar notifySuccess o notifyFailure notificar al host que el flujo de inicialización de la aplicación se ha completado.

    • contentUrl: agregue la dirección URL de la página de contenido.
    • entityId: agregue un identificador único.
  3. Elimine los recursos y realice cualquier limpieza necesaria en el beforeSuspendOrTerminate controlador.

En el diagrama de flujo siguiente se muestra el primer inicio de una aplicación que quiere participar en la suspensión de la aplicación (registre los resume controladores o beforeSuspensionOrTerminate en el primer inicio de la aplicación):

Captura de pantalla que muestra el flujo del primer inicio de la aplicación en el panel lateral de la reunión.

En el diagrama de flujo siguiente se muestra el inicio de aplicaciones suspendidas:

Captura de pantalla que muestra el flujo del inicio suspendido de la aplicación en el panel lateral de la reunión.

Al participar en la suspensión de la aplicación, el iframe o la vista web que se usa para hospedar la aplicación incrustada se reutiliza a medida que los usuarios navegan a diferentes instancias de la aplicación dentro de una ventana. El iframe o la vista web que se usa para hospedar la aplicación se oculta cuando los usuarios abandonan la aplicación y se muestran cuando los usuarios vuelven a la aplicación.

Nota:

Si la suspensión de la aplicación no está habilitada, el iframe o la vista web se vuelve a crear cada vez que el usuario inicia la aplicación.

Hay varias razones para que una aplicación no se suspenda o para que una aplicación se quite de la memoria caché. Algunas razones generales de las aplicaciones de Microsoft 365 son:

  • La carga total de memoria es alta.
  • El número total de aplicaciones suspendidas supera el tamaño máximo de caché. En esta circunstancia, se quita la aplicación suspendida más antigua.
  • La aplicación finaliza si la memoria disponible de la máquina es baja.
  • La aplicación se suspende durante mucho tiempo sin que se reanude.
  • La aplicación no se carga y finaliza.

Dentro de la aplicación de Teams, algunos de los motivos son (los números aquí están sujetos a cambios):

  • Si la carga de memoria del sistema es alta, la aplicación se quita de la memoria caché.
  • La aplicación finaliza si Teams no recibe la readyToUnload señal de TeamsJS en un plazo de 30 segundos después de enviar la beforeUnload notificación.
  • La suspensión de la aplicación está deshabilitada si la memoria del sistema es menor que 4 GB o si la memoria disponible es menor que 1 GB en Windows o 512 MB en Mac.
  • El panel lateral es el único frameContext compatible para la suspensión de aplicaciones en reuniones.
  • No se admite la suspensión de la aplicación para las reuniones en las que el número de usuarios invitados es superior a 20.
  • En iOS, cuando se finaliza la aplicación de Teams, la aplicación se quita de la memoria caché.

Ejemplo de código

El siguiente fragmento de código es un ejemplo de app.lifecycle.registerOnResumeHandler api y app.lifecycle.registerBeforeSuspendOrTerminateHandler :

MicrosoftTeams.app.lifecycle.registerOnResumeHandler((data) => {  

   console.log("got resume call" , data.contentUrl, data.entityId);  

   // use contentUrl to route to correct page  
   // invoke notifySuccess when ready  

   app.notifySuccess();  

}); 

MicrosoftTeams.app.lifecycle.registerBeforeSuspendOrTerminateHandler(() => {  

   // dispose resources and resolve promise 

}); 

Nota:

Anteriormente, las API del módulo se usaban para habilitar el teamsCore almacenamiento en caché de aplicaciones. Si una aplicación se registra para ambos app.lifecycle y teamsCore pares de controladores, los app.lifecycle controladores sobrescriben los teamsCore controladores.

Herramienta de depuración para aplicaciones almacenadas en caché

Nota:

La herramienta de depuración para aplicaciones almacenadas en caché está disponible en versión preliminar para desarrolladores públicos para aplicaciones de Teams.

Puede habilitar Proto Task Manager en Teams, una herramienta de depuración que muestra el estado de las aplicaciones almacenadas en caché. En el cliente de Teams, seleccione las teclas Control+Mayús+Alt+8 en Windows o Comando+Mayús+Opción+8 en Mac para abrir Proto Task Manager.

Captura de pantalla que muestra la pestaña almacenamiento en caché en el Administrador de tareas proto en Teams.

La pestaña AppCaching contiene los detalles siguientes:

  • state: muestra el estado almacenado en caché o sin almacenar en caché de la aplicación.
  • isActive: muestra el estado activo o inactivo de la aplicación almacenada en caché.
  • timeElapsed: muestra el tiempo transcurrido desde que la aplicación se almacenaba en caché.
  • supportsLoad: muestra si la aplicación registró el Load controlador si el almacenamiento en caché de la aplicación está habilitado.
  • supportsBeforeUnload: muestra si la aplicación registró el BeforeUnload controlador si el almacenamiento en caché de la aplicación está habilitado.
  • totalFrameMemory: muestra el uso de memoria de la aplicación.
  • totalFrameCommitMemory: muestra el uso de CPU de la aplicación.

Aplicaciones de pestaña de precaching

Nota:

La precaching tab apps solo se admite en clientes web y de escritorio de Teams.

Aunque el almacenamiento en caché reduce los tiempos de carga posteriores de una aplicación, la precaching optimiza el tiempo de carga inicial de una aplicación al permitir que Teams precargue la aplicación. Teams carga previamente las aplicaciones en segundo plano después del inicio o cuando están inactivas, en función de los patrones de uso de aplicaciones recientes de los usuarios y del historial de caché de las aplicaciones. Las aplicaciones precargadas permanecen almacenadas en caché hasta que el usuario abre la aplicación, lo que da lugar a un tiempo de carga más rápido.

Si habilita la precaching, la aplicación usa recursos y se realiza un seguimiento de los datos de telemetría mientras se encuentra en estado almacenado en caché. Para obtener información sobre cómo optimizar la aplicación para la precaching, consulte los procedimientos recomendados.

Habilitación de la precaching para aplicaciones de pestaña

Para habilitar la precaching para la aplicación de pestaña, siga estos pasos:

  1. Habilite el almacenamiento en caché de aplicaciones.

  2. Actualice el manifiesto de la aplicación de la siguiente manera:

    1. Establezca el valor de showLoadingIndicator en true. Esta acción garantiza que Teams espera hasta que la aplicación envíe notifySuccess para concluir la secuencia de carga de la aplicación durante la precaching. Para obtener más información, vea showLoadingIndicator.

    2. Agregue el backgroundLoadConfiguration objeto y defina .contentUrl

      {
      "backgroundLoadConfiguration": {
          "tabConfiguration": {
              "contentUrl": "https://www.contoso.com/content?host=msteams&isBackgroundLoad=true"
              }
          }
      }
      

      Nota:

      • contentUrl No puede contener parámetros específicos del contexto, como la dirección URL del sitio de equipo o el identificador de subproceso, ya que Teams carga aplicaciones sin contexto previo durante el inicio.
      • contentUrl debe ser lo suficientemente genérico como para cargarse en segundo plano sin ninguna interacción del usuario.

      Para obtener más información, vea backgroundLoadConfiguration.

Supervisión de la carga en segundo plano

Puede identificar si Teams cargó la aplicación en segundo plano sin interacción del usuario si supervisa la isBackgroundLoad propiedad. Si el estado de la propiedad es true, indica que Teams cargó la aplicación en segundo plano y no puede interactuar con el usuario. Por lo tanto, la aplicación no necesita representar elementos de interfaz de usuario, como mensajes de inicio de sesión.

Supervise la isBackgroundLoad propiedad en el contexto de la aplicación para optimizar la aplicación para una carga y representación eficaces del almacenamiento en caché. Para obtener más información, consulte isBackgroundLoad.

Procedimientos recomendados

A continuación se muestran los procedimientos recomendados para la suspensión y precaching de aplicaciones:

  • Se recomienda implementar funcionalidades de almacenamiento web o de trabajo de servicio para almacenar los datos o la vista web localmente. Esta estrategia ayuda a cargar la aplicación más rápido en los inicios posteriores.

  • Registre los controladores de suspensión de la aplicación al principio de la secuencia de inicio, como justo después de llamar a app.initialize y antes de que la aplicación envíe notifySuccess. Si el cliente de Teams no ve estos registros antes de que el usuario deje la aplicación, la aplicación no se almacena en caché.

  • Intente reducir la superficie de memoria cuando se llame al app.lifecycle.onBeforeSuspendOrTerminateHandler controlador y la aplicación esté a punto de suspenderse. Por ejemplo, las referencias de versión, quitar eventListeners, pausar las llamadas de sincronización o detener las solicitudes de red.

  • La precaching aumenta el tráfico a la aplicación además de las solicitudes iniciadas por el usuario. Asegúrese de que el punto de conexión que proporcione como contentUrl puede controlar las solicitudes en segundo plano varias veces para cada usuario en un día. Asegúrese de realizar los ajustes de telemetría necesarios para adaptarse a la carga en segundo plano de la aplicación.

  • Asegúrese de que la aplicación usa menos o igual que 130 MB de memoria en el estado almacenado en caché.

Limitaciones generales

Las siguientes son limitaciones generales para la suspensión de aplicaciones:

  • No hay ninguna garantía de que se suspenda una aplicación. Hay motivos que pueden provocar la terminación de la aplicación aunque una aplicación haya registrado los controladores necesarios.

  • Una aplicación se suspende solo cuando el usuario se aleja de la aplicación. Si una aplicación tiene varias pestañas estáticas, cuando el usuario cambia entre pestañas, la pestaña no se suspenderá. Se seguirá llamando al controlador , app.lifecycle.onBeforeSuspendOrTerminate, .

  • La aplicación suspendida se puede usar en la misma ventana. La aplicación que se suspende en una ventana emergente no se puede reutilizar en la ventana Principal.

  • Cuando se suspende una aplicación, se eliminan todos los controladores registrados. Cuando se reanuda la aplicación, todos los controladores, como themeChange o focusEnter, deben volver a registrarse. No se envían notificaciones a la aplicación cuando se suspenden. Si la aplicación requiere notificaciones incluso cuando se suspende, es posible que la suspensión no sea la solución adecuada.

  • Solo las aplicaciones de página única que usan el enrutamiento del lado cliente para la navegación por páginas pueden beneficiarse de la suspensión y reanudación de la aplicación. Se recomienda usar el mismo dominio en todos los contextos del inicio de la aplicación.

  • Se espera que una aplicación se suspenda. No se permiten solicitudes del SDK cuando se suspende la aplicación.

  • La aplicación host invoca al resume controlador solo una vez completada la suspendOrTerminate secuencia de la aplicación. Por ejemplo, si un usuario inicia la pestaña A de la aplicación y, a continuación, inicia la pestaña B de la misma aplicación, la pestaña B no obtiene la resume señal hasta que el controlador de la suspendOrTerminate pestaña A haya terminado de ejecutarse.

  • Las aplicaciones se almacenan en caché por ventana. El almacenamiento en caché de aplicaciones se produce por aplicación (no por pestaña) en la misma ventana.

  • En la tabla de la sección introductoria, Suspensión de aplicaciones para la aplicación de pestaña, se proporciona información sobre lo que frameContext Teams admite para el almacenamiento en caché. En el caso de los centros que no son de Teams, solo FrameContext.Content se almacena en caché, lo que significa FrameContext.Task que no se admite el contenido interno Dialog .

  • Registre solo el beforeSuspendOrTerminate controlador si la aplicación no requiere suspensión de la aplicación, pero necesita tiempo para guardar el estado de forma segura (ya que dejar la aplicación puede hacer que el contenido de la aplicación se quite abruptamente del modelo de objetos de documento (DOM)). Si la aplicación no se ha registrado para el resume evento, se quita del DOM una vez completado el suspendOrTerminate flujo.

Limitaciones en Teams

Las siguientes son las limitaciones de la suspensión de aplicaciones dentro de la aplicación de Teams:

  • El cliente de Teams invoca el resume controlador solo una vez completada la suspendOrTerminate secuencia de la aplicación. Por ejemplo, si un usuario inicia la pestaña A de la aplicación y, a continuación, inicia la pestaña B de la misma aplicación, la pestaña B no obtendrá la resume señal hasta que el controlador de la suspendOrTerminate pestaña A haya terminado de ejecutarse.

  • No se admite la suspensión de la aplicación para la fase de reunión o el cuadro de diálogo (denominado módulo de tareas en TeamsJS v1.x), ya que se pueden abrir en la parte superior de la pestaña y no se puede usar el mismo iframe o vista web para representar el contenido en la pestaña y el cuadro de diálogo.

  • Siga las instrucciones de esta sección para incorporar la aplicación a la suspensión de la aplicación en la reunión de Teams. Para la compatibilidad con la suspensión de aplicaciones solo en reuniones, registre los resume controladores o beforeSuspendOrTerminate si el contexto es sidePanel.

Solución de problemas

¿No se suspenden las aplicaciones? ¿Por qué no se invoca el controlador de reanudación en la navegación posterior?

  • Compruebe si se cumplen las restricciones de memoria disponibles y del sistema.

  • Reduzca la superficie de memoria cuando se almacene en caché. Use el beforeSuspendOrTerminate controlador para eliminar recursos, por ejemplo, liberar referencias y quitar agentes de escucha de eventos que podrían no ser necesarios cuando se almacenan en caché.

Ejemplo de código

Ejemplo de nombre Descripción Node.js
Almacenamiento en caché de aplicaciones En este ejemplo se muestra cómo mejorar los tiempos de carga de aplicaciones durante las reuniones con el almacenamiento en caché del panel lateral, lo que mejora la experiencia del usuario en Microsoft Teams. Ver

Consulte también