Freigeben über


Anhalten der App für Ihre Registerkarten-App

Wenn ein Benutzer von einer App weg navigiert, kann die App entweder angehalten oder beendet werden. Das Anhalten bedeutet, dass sich die App im Hintergrund befindet und für den Benutzer nicht sichtbar ist. Beendigung bedeutet, dass die App vollständig geschlossen und aus dem Arbeitsspeicher entfernt wird. Das Anhalten einer App verbessert die nachfolgende Startzeit der Apps in Teams oder anderen Microsoft 365-Produkten, da Sie einige Ressourcen und Ressourcen im Arbeitsspeicher behalten können, die Sie verwenden können, wenn Sie Ihre App aktivieren.

Zuvor wurde das Anhalten von Apps als zwischengespeicherte App bezeichnet und nur in Teams unterstützt, aber jetzt wird sie für Teams-Apps unterstützt, die auch für andere Microsoft 365-Anwendungen erweitert wurden.

In Teams wird das Anhalten von Apps für die folgenden Bereiche und Clients unterstützt:

Bereich   Desktop iOS Android
Personal ✔️ Cachelebensdauer: 30 Minuten ✔️
Chat ✔️ Cachelebensdauer: 30 Minuten ✔️
Kanal ✔️ Cachelebensdauer: 30 Minuten ✔️
Registerkarte "Besprechung" ✔️ Cachelebensdauer: 30 Minuten ✔️
Besprechungsseitenbereich oder Apps in Besprechungen ✔️ Cachelebensdauer: 20 Minuten

Aktivieren des Anhaltens von Apps

Führen Sie die folgenden Schritte aus, um das Anhalten der App zu aktivieren:

  1. Rufen Sie die APIs app.lifeCycle.registerBeforeSuspendOrTerminate und app.lifeCycle.registerOnResumeHandler auf. Diese Handler sind erforderlich, um das Anhalten von Apps zu aktivieren. Weitere Informationen finden Sie im Lebenszyklusmodul , das in der TeamsJS-Referenz verfügbar ist.

    Der app.lifecycle.registerBeforeSuspendOrTerminate Handler bietet Ihnen die Möglichkeit, einige Aufgaben auszuführen, bevor Ihre App angehalten oder beendet wird, während aufgerufen app.lifecycle.registerOnResumeHandler wird, wenn ein Benutzer zurück zu Ihrer App navigiert.

    Die Registrierung beider Handler ermöglicht eine App für das Anhalten von Apps, aber es ist wichtig zu verstehen, dass die Registrierung nicht garantiert, dass die App nicht im Hintergrund beendet wird. Ob eine App beendet wird, hängt von anderen Faktoren wie dem verfügbaren Arbeitsspeicher ab.

    Hinweis

    Zuvor teamsCore.registerBeforeUnloadHandler wurden und teamsCore.registerOnLoadHandler verwendet, um das Zwischenspeichern von Apps zu aktivieren, aber sie sind jetzt veraltet.

  2. Verwenden Sie contentUrl und entityId werden an den Fortsetzungshandler übergeben, um an die richtige Seite in Ihrer App weiterzuleiten und den Host aufzurufen notifySuccess oder notifyFailure zu benachrichtigen, dass der App-Initialisierungsflow abgeschlossen ist.

    • contentUrl: Inhaltsseiten-URL hinzufügen.
    • entityId: Fügen Sie einen eindeutigen Bezeichner hinzu.
  3. Löschen Sie Ressourcen, und führen Sie alle im Handler erforderlichen beforeSuspendOrTerminate Bereinigungen durch.

Das folgende Flussdiagramm zeigt den ersten Start einer App, die sich für das Anhalten der App entscheiden möchte (registrieren Sie die resume Handler oder beforeSuspensionOrTerminate beim ersten Start der App):

Screenshot: Ablauf des ersten Starts der App im Seitenbereich der Besprechung.

Das folgende Flussdiagramm zeigt den Start angehaltener Apps:

Screenshot: Ablauf des angehaltenen Starts der App im Besprechungsseitenbereich

Wenn Sie sich für das Anhalten der App entscheiden, wird der iFrame oder die Webansicht, die zum Hosten der eingebetteten App verwendet wird, wiederverwendet, wenn Benutzer innerhalb eines Fensters zu verschiedenen Instanzen der App navigieren. Der zum Hosten der App verwendete iFrame oder Webview wird ausgeblendet, wenn die Benutzer die App verlassen und angezeigt, wenn die Benutzer zur App zurückkehren.

Hinweis

Wenn das Anhalten der App nicht aktiviert ist, wird der iFrame oder die Webansicht jedes Mal neu erstellt, wenn der Benutzer die App startet.

Es gibt mehrere Gründe dafür, dass eine App nicht angehalten wird oder dass eine App aus dem Cache entfernt wird. Einige allgemeine Gründe für Microsoft 365-Apps sind:

  • Die Gesamtauslastung des Arbeitsspeichers ist hoch.
  • Die Gesamtzahl der angehaltenen Apps überschreitet die maximale Cachegröße. In diesem Fall wird die älteste angehaltene App entfernt.
  • Die App wird beendet, wenn der verfügbare Arbeitsspeicher des Computers gering ist.
  • Die App wird lange angehalten, ohne fortgesetzt zu werden.
  • Die App kann nicht geladen werden und wird beendet.

Innerhalb der Teams-App gibt es einige der Gründe (die hier aufgeführten Zahlen können sich ändern):

  • Wenn die Systemarbeitsspeicherauslastung hoch ist, wird die App aus dem Cache entfernt.
  • Die App wird beendet, wenn Teams das readyToUnload Signal nicht innerhalb von 30 Sekunden nach dem Senden der beforeUnload Benachrichtigung von TeamsJS empfängt.
  • Das Anhalten der App ist deaktiviert, wenn der Systemarbeitsspeicher kleiner als 4 GB ist oder wenn der verfügbare Arbeitsspeicher unter Windows weniger als 1 GB oder 512 MB auf dem Mac beträgt.
  • Der Seitenbereich ist der einzige unterstützte frameContext für das Anhalten von Apps in Besprechungen.
  • Das Anhalten von Apps wird nicht für Besprechungen unterstützt, bei denen die Anzahl der eingeladenen Benutzer mehr als 20 beträgt.
  • Unter iOS wird die App aus dem Cache entfernt, wenn die Teams-App beendet wird.

Code example

Der folgende Codeausschnitt ist ein Beispiel für - und app.lifecycle.registerBeforeSuspendOrTerminateHandler -app.lifecycle.registerOnResumeHandlerAPIs:

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 

}); 

Hinweis

Zuvor wurden APIs im Modul verwendet, um das teamsCore Zwischenspeichern von Apps zu aktivieren. Wenn eine App sowohl für als auch app.lifecycleteamsCore für Handlerpaare registriert wird, überschreiben die app.lifecycle Handler die teamsCore Handler.

Debugtool für zwischengespeicherte Apps

Hinweis

Das Debugtool für zwischengespeicherte Apps ist in der öffentlichen Entwicklervorschau für Teams-Apps verfügbar.

Sie können den Proto-Task-Manager in Teams aktivieren, ein Debugtool, das die status Ihrer zwischengespeicherten Apps anzeigt. Wählen Sie in Ihrem Teams-Client die Tasten CTRL+UMSCHALT+ALT+8 unter Windows oder BEFEHL+UMSCHALT+WAHL+8 auf dem Mac aus, um den Proto-Task-Manager zu öffnen.

Screenshot: Registerkarte

Die Registerkarte AppCaching enthält die folgenden Details:

  • state: Zeigt den zwischengespeicherten oder nicht zwischengespeicherten Zustand der App an.
  • isActive: Zeigt die aktive oder inaktive status der zwischengespeicherten App an.
  • timeElapsed: Zeigt die Zeit an, die seit dem Zwischenspeichern der App verstrichen ist.
  • supportsLoad: Zeigt an, ob die App den Load Handler registriert hat, wenn das Zwischenspeichern von Apps aktiviert ist.
  • supportsBeforeUnload: Zeigt an, ob die App den Handler registriert hat, wenn das BeforeUnload Zwischenspeichern von Apps aktiviert ist.
  • totalFrameMemory: Zeigt die Speicherauslastung der App an.
  • totalFrameCommitMemory: Zeigt die CPU-Auslastung der App an.

Vorbereiten von Registerkarten-Apps

Hinweis

Vorbereiten von Registerkarten-Apps wird nur in Teams-Web- und Desktopclients unterstützt.

Während die Zwischenspeicherung die nachfolgenden Ladezeiten einer App reduziert, optimiert das Vorabspeichern die anfängliche Ladezeit einer App, indem Teams das Vorabladen der App ermöglicht. Teams laden Apps nach dem Start oder im Leerlauf vorab im Hintergrund, basierend auf den aktuellen App-Nutzungsmustern der Benutzer und dem Cacheverlauf der Apps. Die vorab geladenen Apps bleiben zwischengespeichert, bis der Benutzer die App öffnet, was zu einer schnelleren Ladezeit führt.

Wenn Sie precaching aktivieren, nutzt Ihre App Ressourcen, und Telemetriedaten werden nachverfolgt, während sich der Zustand vorab zwischengespeichert befindet. Informationen zum Optimieren Ihrer App für die Voraberstellung finden Sie unter Bewährte Methoden.

Aktivieren der Vorcaching für Registerkarten-Apps

Führen Sie die folgenden Schritte aus, um precaching für Ihre Registerkarten-App zu aktivieren:

  1. Aktivieren sie das Zwischenspeichern von Apps.

  2. Aktualisieren Sie Ihr App-Manifest wie folgt:

    1. Legen Sie den Wert von showLoadingIndicator auf fest true. Durch diese Aktion wird sichergestellt, dass Teams wartet, bis Ihre App sendet notifySuccess , um die App-Ladesequenz während des Vorcachings abzuschließen. Weitere Informationen finden Sie unter showLoadingIndicator.

    2. Fügen Sie das backgroundLoadConfiguration -Objekt hinzu, und definieren Sie .contentUrl

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

      Hinweis

      • Die contentUrl darf keine kontextspezifischen Parameter enthalten, z. B. teamwebsite-URL oder Thread-ID, da Teams Apps ohne vorherigen Kontext während des Starts lädt.
      • Muss contentUrl generisch genug sein, um ohne Benutzerinteraktion im Hintergrund geladen zu werden.

      Weitere Informationen finden Sie unter backgroundLoadConfiguration.

Überwachen des Ladens im Hintergrund

Sie können feststellen, ob Teams die App ohne Benutzerinteraktion im Hintergrund geladen hat, wenn Sie die isBackgroundLoad -Eigenschaft überwachen. Wenn der Zustand der Eigenschaft lautet true, gibt dies an, dass Teams die App im Hintergrund geladen hat und nicht mit dem Benutzer interagieren kann. Daher muss die App keine Benutzeroberflächenelemente wie Anmeldeaufforderungen rendern.

Überwachen Sie die isBackgroundLoad -Eigenschaft im App-Kontext, um die App für effektives Laden und Rendern vor dem Zwischenspeichern zu optimieren. Weitere Informationen finden Sie unter isBackgroundLoad.

Bewährte Methoden

Im Folgenden sind die bewährten Methoden für das Anhalten und Vorbereiten von Apps aufgeführt:

  • Es wird empfohlen, Webspeicher- oder Service Workerfunktionen zu implementieren, um die Daten oder webview lokal zu speichern. Diese Strategie trägt dazu bei, die App bei nachfolgenden Starts schneller zu laden.

  • Registrieren Sie die Handler für das Anhalten der App zu einem frühen Zeitpunkt in Der Startsequenz, z. B. direkt nach dem Aufruf app.initialize und vor dem Senden notifySuccessvon . Wenn dem Teams-Client diese Registrierungen nicht angezeigt werden, bevor der Benutzer die App verlässt, wird die App nicht zwischengespeichert.

  • Versuchen Sie, den Speicherbedarf zu reduzieren, wenn der app.lifecycle.onBeforeSuspendOrTerminateHandler Handler aufgerufen wird und die App angehalten wird. Beispiel: Freigeben von Verweisen, Entfernen von eventListenern, Anhalten von Synchronisierungsaufrufen oder Anhalten von Netzwerkanforderungen.

  • Precaching erhöht den Datenverkehr zu Ihrer App zusätzlich zu vom Benutzer initiierten Anforderungen. Stellen Sie sicher, dass der Endpunkt, den Sie als angeben, contentUrl mehrmals an einem Tag Hintergrundanforderungen für jeden Benutzer verarbeiten kann. Stellen Sie sicher, dass Sie Telemetrieanpassungen vornehmen, die für das Laden im Hintergrund der App erforderlich sind.

  • Stellen Sie sicher, dass Ihre App im vorab zwischengespeicherten Zustand weniger als oder gleich 130 MB Arbeitsspeicher verwendet.

Allgemeine Einschränkungen

Im Folgenden finden Sie allgemeine Einschränkungen für das Anhalten von Apps:

  • Es gibt keine Garantie, dass eine App angehalten wird. Es gibt Gründe, die zur Beendigung der App führen können, obwohl eine App die erforderlichen Handler registriert hat.

  • Eine App wird nur angehalten, wenn der Benutzer von der App weg navigiert. Wenn eine App über mehrere statische Registerkarten verfügt und der Benutzer zwischen Registerkarten wechselt, wird die Registerkarte nicht angehalten. Der Handler wird app.lifecycle.onBeforeSuspendOrTerminateweiterhin aufgerufen.

  • Die angehaltene App kann innerhalb desselben Fensters verwendet werden. Die App, die in einem Popupfenster angehalten wird, kann nicht im Hauptfenster wiederverwendet werden.

  • Wenn eine App angehalten wird, werden alle registrierten Handler gelöscht. Wenn die App fortgesetzt wird, müssen alle Handler, z themeChange . B. oder focusEnter, erneut registriert werden. Beim Anhalten werden keine Benachrichtigungen an die App gesendet. Wenn Ihre App Benachrichtigungen erfordert, auch wenn sie angehalten wird, ist das Anhalten möglicherweise nicht die richtige Lösung.

  • Nur Single-Page-Apps, die clientseitiges Routing für die Seitennavigation verwenden, können vom Anhalten und Fortsetzen der App profitieren. Es wird empfohlen, dieselbe Domäne in allen Kontexten Ihres App-Starts zu verwenden.

  • Es wird erwartet, dass eine App in den Ruhezustand versetzt wird, wenn sie angehalten wird. Wenn die App angehalten wird, sind keine SDK-Anforderungen zulässig.

  • Die Host-App ruft den resume Handler erst auf, nachdem die suspendOrTerminate Sequenz der App abgeschlossen wurde. Wenn ein Benutzer beispielsweise die Registerkarte A Ihrer App startet und dann Tab B derselben App startet, erhält Tab B das resume Signal erst, wenn die Ausführung des suspendOrTerminate Handlers auf Registerkarte A abgeschlossen ist.

  • Apps werden pro Fenster zwischengespeichert. Das Zwischenspeichern von Apps erfolgt pro App (nicht pro Registerkarte) innerhalb desselben Fensters.

  • Die Tabelle im Einführungsabschnitt , App-Aussetzung für Ihre Registerkarten-App, enthält Informationen dazu, was frameContext Teams für die Zwischenspeicherung unterstützt. Für Nicht-Teams-Hubs wird nur FrameContext.Content zwischengespeichert, was bedeutet, FrameContext.Task dass dies in Dialog nicht unterstützt wird.

  • Registrieren Sie nur den beforeSuspendOrTerminate Handler, wenn Ihre App nicht angehalten werden muss, aber Zeit zum sicheren Speichern des Zustands benötigt (da das Verlassen der App dazu führen kann, dass der App-Inhalt plötzlich aus dem Dokumentobjektmodell (DOM) entfernt wird). Wenn sich die App nicht für das resume Ereignis registriert hat, wird sie nach Abschluss des Flows aus dem suspendOrTerminate DOM entfernt.

Einschränkungen innerhalb von Teams

Im Folgenden sind die Einschränkungen für das Anhalten von Apps innerhalb der Teams-App aufgeführt:

  • Der Teams-Client ruft den resume Handler erst auf, nachdem die suspendOrTerminate Sequenz der App abgeschlossen wurde. Wenn ein Benutzer beispielsweise Registerkarte A Ihrer App startet und dann Tab B derselben App startet, erhält Tab B das resume Signal erst, wenn die Ausführung des suspendOrTerminate Handlers auf Registerkarte A abgeschlossen ist.

  • Das Anhalten von Apps wird für Besprechungsphasen- oder Dialogkontexte (in TeamsJS v1.x als Aufgabenmodul bezeichnet) nicht unterstützt, da sie oben auf der Registerkarte geöffnet werden können und derselbe iFrame oder dieselbe Webansicht nicht zum Rendern des Inhalts auf der Registerkarte und im Dialogfeld verwendet werden kann.

  • Befolgen Sie die Richtlinien in diesem Abschnitt, um das Onboarding Ihrer App für das Anhalten von Apps in der Teams-Besprechung durchzuführen. Registrieren Sie zur Unterstützung des Anhaltens von Apps nur in Besprechungen die resume Handler oder beforeSuspendOrTerminate , wenn der Kontext ist sidePanel.

Problembehandlung

Apps werden nicht angehalten? Warum wird der Resume-Handler bei der nachfolgenden Navigation nicht aufgerufen?

  • Überprüfen Sie, ob die System- und verfügbaren Arbeitsspeichereinschränkungen erfüllt sind.

  • Reduzieren Sie den Speicherbedarf beim Zwischenspeichern. Verwenden Sie den beforeSuspendOrTerminate Handler, um Ressourcen zu löschen, z. B. Freigeben von Verweisen und Entfernen von Ereignislistenern, die beim Zwischenspeichern möglicherweise nicht benötigt werden.

Codebeispiel

Beispielname Beschreibung Node.js
Zwischenspeichern von Apps In diesem Beispiel wird gezeigt, wie Sie die Ladezeiten von Apps während Besprechungen durch zwischenspeichern und so die Benutzererfahrung in Microsoft Teams verbessern. Anzeigen

Siehe auch