Kontext für Ihre Registerkarte erhalten

Ihre Registerkarte benötigt Kontextinformationen, um relevante Inhalte anzuzeigen:

  • Grundlegende Informationen über den Benutzer, das Team oder das Unternehmen.
  • Gebietsschema- und Designinformationen.
  • Die page.id und page.subPageId die identifizieren, was sich auf dieser Registerkarte befindet (bekannt als entityId und subEntityId vor TeamsJS v2.0.0).

Benutzerkontext

Kontext zum Benutzer, zum Team oder zum Unternehmen kann besonders nützlich sein, wenn:

  • Sie erstellen oder ordnen Ressourcen in Ihrer App dem angegebenen Benutzer oder Team zu.
  • Sie initiieren einen Authentifizierungsfluss von Microsoft Entra ID oder einem anderen Identitätsanbieter und verlangen nicht, dass der Benutzer seinen Benutzernamen erneut eingibt.

Weitere Informationen finden Sie unter Authentifizieren eines Benutzers in Microsoft Teams.

Wichtig

Obwohl diese Benutzerinformationen zu einer reibungslosen Benutzererfahrung beitragen können, dürfen Sie sie nicht als Identitätsnachweis verwenden. Beispielsweise kann ein Angreifer Ihre Seite in einem Browser laden und schädliche Informationen oder Anforderungen anzeigen.

Zugriff auf Kontextinformationen

Sie können auf zwei Arten auf Kontextinformationen zugreifen:

Abrufen von Kontext durch Einfügen von URL-Platzhalterwerten

Verwenden Sie Platzhalter in Ihren Konfigurations-oder Inhalts-URLs. Microsoft Teams ersetzt die Platzhalter durch die relevanten Werte, wenn die tatsächliche Konfigurations- oder Inhalts-URL ermittelt wird. Die verfügbaren Platzhalter umfassen alle Felder des Kontextobjekts . Zu den gängigen Platzhaltern gehören die folgenden Eigenschaften:

  • {page.id}: Die vom Entwickler definierte eindeutige ID für die Seite, die beim ersten Konfigurieren der Seite definiert wurde. (Bekannt als {entityId} vor TeamsJS v2.0.0).
  • {page.subPageId}: Die vom Entwickler definierte eindeutige ID für die Unterseite, auf die dieser Inhalt verweist, definiert beim Generieren eines Deep Links für ein bestimmtes Element innerhalb der Seite. (Bekannt als {subEntityId} vor TeamsJS v2.0.0).
  • {user.loginHint}: Ein Wert, der als Anmeldehinweis für Microsoft Entra ID geeignet ist. Dies ist in der Regel der Anmeldename des aktuellen Benutzers in seinem Home-Mandanten. (Bekannt als {loginHint} vor TeamsJS v2.0.0).
  • {user.userPrincipalName}: Der Benutzerprinzipalname des aktuellen Benutzers im aktuellen Mandanten. (Bekannt als {userPrincipalName} vor TeamsJS v2.0.0).
  • {user.id}: Die Microsoft Entra Objekt-ID des aktuellen Benutzers im aktuellen Mandanten. (Bekannt als {userObjectId} vor TeamsJS v2.0.0).
  • {app.theme}: Das aktuelle Benutzeroberflächendesign defaultwie , dark, oder glass. contrast (Bekannt als {theme} vor TeamsJS v2.0.0).
  • {team.groupId}: Die ID der Microsoft 365-Gruppe, in der sich die Registerkarte befindet. (Bekannt als {groupId} vor TeamsJS v2.0.0)
  • {user.tenant.id}: Die Microsoft Entra Mandanten-ID des aktuellen Benutzers. (Bekannt als {tid} vor TeamsJS v2.0.0).
  • {app.locale}: Das aktuelle Gebietsschema des Benutzers, beispielsweise formatiert als languageId-countryId.en-us (Bekannt als {locale} vor TeamsJS v2.0.0).

Hinweis

  • Der bisherige Platzhalter {upn} ist nun veraltet. Aus Gründen der Abwärtskompatibilität ist dies ein Synonym für {user.loginHint}.
  • Mobile Versionen (Android und iOS) von Microsoft Teams unterstützen nur TeamsJS v1.x.x-Platzhalter.

Beispielsweise in Ihrem App-Manifest, wenn Sie das Attribut "configurationUrl " auf "https://www.contoso.com/config?name={user.loginHint}&tenant={user.tenant.id}&group={team.groupId}&theme={app.theme}" tab festlegen und der angemeldete Benutzer die folgenden Attribute hat:

  • Ihr Benutzername ist user@example.com.
  • Die Mandanten-ID des Unternehmens lautet e2653c-etc.
  • Sie sind ein Mitglied der Microsoft 365-Gruppe mit der ID 00209384-etc.
  • Der Benutzer hat sein Teams-Design auf dunkel festgelegt.

Teams ruft beim Konfigurieren der Registerkarte die folgende URL auf:

https://www.contoso.com/config?name=user@example.com&tenant=e2653c-etc&group=00209384-etc&theme=dark

Abrufen von Kontext mithilfe der JavaScript-Bibliothek von Microsoft Teams

Sie können die Kontextinformationen auch mithilfe der Microsoft Teams JavaScript-Clientbibliothek abrufen.

Die Informationen können durch Aufruf von microsoftTeams.app.getContext().then((context) => {/*...*/});abgerufen werden.

Der folgende Code enthält ein Beispiel für eine Kontextvariable:

{
 "app": {
   "host": {
     "clientType": "The type of host client. Possible values are android, ios, web, desktop, surfaceHub, teamsRoomsAndroid, teamsPhones, teamsDisplays rigel (deprecated, use teamsRoomsWindows instead)",
     "name": "",
     "ringId": "The current ring ID",
     "sessionId": "The unique ID for the current Teams session for use in correlating telemetry data"    },
   "iconPositionVertical": "",
   "locale": "The current locale of the user formatted as languageId-countryId (for example, en-us)",
   "osLocaleInfo": "",
   "parentMessageId": "The parent message ID from which this dialog is launched",
   "sessionId": "The unique ID for the current session used for correlating telemetry data",
   "theme": "The current UI theme: default | dark | glass | contrast",
   "userClickTime": "",
   "userFileOpenPreference": ""  },
 "channel": {
   "defaultOneNoteSectionId": "The OneNote section ID that is linked to the channel",
   "displayName": "The name of the current channel",
   "id": "The channel ID in the format 19:[id]@thread.skype",
   "membershipType": "",
   "ownerGroupId": "",
   "ownerTenantId": "",
   "relativeUrl": "The relative path to the SharePoint folder associated with the channel"  },
 "chat": { "id": "The chat ID in the format 19:[id]@thread.skype" },
 "meeting": {
   "id": "The meeting ID used by tab when running in meeting context"  },
 "page": {
   "frameContext": "The context where tab URL is loaded (for example, content, task, setting, remove, sidePanel)",
   "id": "The developer-defined unique ID for the entity this content points to",
   "isFullScreen": "Indicates if the tab is in full-screen",
   "isMultiWindow": "The indication whether the tab is in a pop out window",
   "sourceOrigin": "",
   "subPageId": "The developer-defined unique ID for the sub-entity this content points to"  },
 "sharepoint": "The SharePoint context is available only when hosted in SharePoint",
 "sharepointSite": {
   "teamSiteDomain": "The domain of the root SharePoint site associated with the team",
   "teamSitePath": "The relative path to the SharePoint site associated with the team",
   "teamSiteUrl": "The root SharePoint site associated with the team"  },
 "team": {
   "displayName": "The name of the current team",
   "groupId": "Guid identifying the current Office 365 Group ID",
   "internalId": "The Microsoft Teams ID in the format 19:[id]@thread.skype",
   "isArchived": "Indicates if team is archived",
   "templateId": "",
   "type": "The type of team",
   "userRole": "The user's role in the team"  },
 "user": {
   "displayName": "",
   "id": "The Azure AD object id of the current user, in the current tenant",
   "isCallingAllowed": "Indicates if calling is allowed for the current logged in user",
   "isPSTNCallingAllowed": "Indicates if PSTN calling is allowed for the current logged in user",
   "licenseType": "The license type for the current user. Possible values are E1, E3, and E5 enterprise plans",
   "loginHint": "A value suitable as a login hint for Azure AD. This is usually the login name of the current user, in their home tenant",
   "tenant": {
     "id": "The Azure AD tenant ID of the current user",
     "teamsSku": "The license type for the current user tenant. Possible values are enterprise, free, edu, unknown"    },
   "userPrincipalName": "The principal name of the current user, in the current tenant"  }
}

TypeScript

import { app, Context } from "@microsoft/teams-js";

app.getContext().then((context: Context) => {
    /*...*/
});

Gleichwertiges async/await Muster:

import { app, Context } from "@microsoft/teams-js";

async function example() {
  const context: Context = await app.getContext();
  /*...*/
}

JavaScript

import { app, Context } from "@microsoft/teams-js";

app.getContext().then((context) => {
    /*...*/
});

Gleichwertiges async/await Muster:

import { app, Context } from "@microsoft/teams-js";

async function example() {
  const context = await app.getContext();
  /*...*/
}

In der folgenden Tabelle sind häufig verwendete Kontexteigenschaften des Kontextobjekts aufgeführt:

TeamsJS v2-Name TeamsJS v1-Name
team.internalId TeamId
team.displayName teamName
channel.id channelId
channel.displayName channelName
chat.id chatId
app.locale Gebietsschema
page.id entityId
page.subPageId subEntityId
user.loginHint loginHint
user.userPrincipalName UPN
user.id userObjectId
user.tenant.id tid
team.groupId groupId
app.theme theme
page.isFullScreen isFullScreen
team.type TeamType
sharepointSite.teamSiteUrl teamSiteUrl
sharepointSite.teamSiteDomain teamSiteDomain
sharepointSite.teamSitePath teamSitePath
channel.relativeUrl channelRelativeUrl
app.host.sessionId sessionId
team.userRole userTeamRole
team.isArchived isTeamArchived
app.host.clientType hostClientType
page.frameContext frameContext
sharepoint sharepoint
user.tenant.teamsSku tenantSKU
user.licenseType userLicenseType
app.parentMessageId parentMessageId
app.host.ringId ringId
app.sessionId appSessionId
user.isCallingAllowed isCallingAllowed
user.isPSTNCallingAllowed isPSTNCallingAllowed
meeting.id meetingId
channel.defaultOneNoteSectionId defaultOneNoteSectionId
page.isMultiWindow isMultiWindow

Weitere Informationen finden Sie unter Updates an der Context-Schnittstelle und der Referenz zur Context-Schnittstellen-API.

Abrufen von Kontext in privaten Kanälen

Hinweis

Private Kanäle befinden sich nur in der privaten Entwicklervorschau.

Wenn Ihre Inhaltsseite in einem privaten Kanal geladen wird, werden die Daten, die Sie von dem getContext Anruf erhalten, verschleiert, um die Privatsphäre des Kanals zu schützen.

Die folgenden Felder werden geändert, wenn sich Ihre Inhaltsseite in einem privaten Kanal befindet:

  • team.groupId: Nicht definiert für private Kanäle
  • team.internalId: Auf die threadId des privaten Kanals festgelegt
  • team.displayName: Auf den Namen des privaten Kanals festlegen
  • sharepointSite.teamSiteUrl: Auf die URL einer eindeutigen, eindeutigen SharePoint-Website für den privaten Kanal festlegen
  • sharepointSite.teamSitePath: Auf den Pfad einer eigenständigen, eindeutigen SharePoint-Website für den privaten Kanal festlegen
  • sharepointSite.teamSiteDomain: Auf die Domäne einer eindeutigen, eindeutigen SharePoint-Websitedomäne für den privaten Kanal festlegen
  • channel.ownerGroupId: Auf die groupId des Hostteams des privaten Kanals festgelegt

Wenn Ihre Seite einen dieser Werte verwendet, muss Private der Wert des channel.membershipType Felds bestimmen, ob Ihre Seite in einem privaten Kanal geladen wurde und entsprechend reagieren kann.

Hinweis

teamSiteUrl Funktioniert auch gut für Standardkanäle. Wenn Ihre Seite einen dieser Werte verwendet, muss Shared der Wert des channelType Felds bestimmen, ob Ihre Seite in einem freigegebenen Kanal geladen wurde und entsprechend reagieren kann.

Kontext in freigegebenen Kanälen abrufen

Wenn die Inhalts-UX in einem freigegebenen Kanal geladen wird, verwenden Sie die vom getContext Aufruf empfangenen Daten für Änderungen an freigegebenen Kanälen. Wenn die Registerkarte einen der folgenden Werte verwendet, müssen Sie das channelType Feld ausfüllen, um festzustellen, ob die Registerkarte in einem freigegebenen Kanal geladen wurde, und entsprechend reagieren. Für freigegebene Kanäle lautet nullder groupId Wert , da die groupId des Host-Teams die tatsächliche Mitgliedschaft des freigegebenen Kanals nicht genau widerspiegelt. Um dieses Problem zu beheben, wurden die hostTeamGroupIDhostTenantID und-Eigenschaften neu hinzugefügt und sind nützlich, um Microsoft Graph-API-Aufrufe zum Abrufen der Mitgliedschaft durchzuführen. hostTeam bezieht sich auf das Team, das den freigegebenen Kanal erstellt hat. currentTeam bezieht sich auf das Team, von dem aus der aktuelle Benutzer auf den freigegebenen Kanal zugreift.

Weitere Informationen zu diesen Konzepten und freigegebenen Kanälen finden Sie unter Freigegebene Kanäle.

Verwenden Sie die folgenden getContext Eigenschaften in freigegebenen Kanälen:

Eigenschaft Beschreibung
channelId Die Eigenschaft wird auf die Thread-ID des freigegebenen Kanals festgelegt.
channelType Die Eigenschaft ist auf sharedChannel für freigegebene Kanäle festgelegt.
groupId Die Eigenschaft ist null für freigegebene Kanäle.
hostTenantId Die Eigenschaft wurde neu hinzugefügt und beschreibt die Mandanten-ID des Hosts, was für den Vergleich mit der Mandanten-ID-Eigenschaft des tid aktuellen Benutzers nützlich ist.
hostTeamGroupId Die Eigenschaft wurde neu hinzugefügt und beschreibt die Microsoft Entra-Gruppen-ID des Hostteams, nützlich für Microsoft Graph-API-Aufrufe zum Abrufen der Mitgliedschaft in freigegebenen Kanälen.
teamId Die Eigenschaft wird neu hinzugefügt und auf die Thread-ID des aktuellen freigegebenen Teams festgelegt.
teamName Die Eigenschaft ist auf den aktuellen freigegebenen Wert des freigegebenen teamNameTeams festgelegt.
teamType Die Eigenschaft ist auf den aktuellen freigegebenen Wert des freigegebenen teamTypeTeams festgelegt.
teamSiteUrl Die Eigenschaft beschreibt die channelSiteUrl.
teamSitePath Die Eigenschaft beschreibt die channelSitePath.
teamSiteDomain Die Eigenschaft beschreibt die channelSiteDomain.
tenantSKU Die Eigenschaft beschreibt die tenantSKU.
tid Die Eigenschaft beschreibt die Mandanten-ID des aktuellen Benutzers.
userObjectId Die Eigenschaft beschreibt die ID des aktuellen Benutzers.
userPrincipalName Die Eigenschaft beschreibt den UPN des aktuellen Benutzers.

Weitere Informationen zu freigegebenen Kanälen finden Sie unter Freigegebene Kanäle.

Designänderung handhaben

Wichtig

  • Standardmäßig unterstützt der neue Teams-Client helle Designs für Apps in Teams-Besprechungen. Wenn die Eigenschaft in der app.theme getContext-API den default Wert zurückgibt, befindet sich der Teams-Client im hellen Design.
  • Frühere Versionen von Teams-Clients unterstützen nur das Design "Dunkel" und "Kontrast" für Apps in Teams-Besprechungen.

Sie können Ihre App registrieren, um informiert zu werden, wenn sich das Design ändert, indem microsoftTeams.app.registerOnThemeChangeHandler(function(theme) { /* ... */ })Sie aufrufen.

Das theme Argument in der Funktion ist eine Zeichenfolge mit dem Wert , defaultdark, glass, oder contrast. Die AppInfo-Eigenschaft in der getContext-API unterstützt das Design für Teams, die glass auf Apple Vision Pro-Geräten ausgeführt werden.

Die folgende Abbildung zeigt die Standarddesignoption in Teams:

Der Screenshot zeigt das Standarddesign im Teams-Desktopclient.

Codebeispiel

Beispielname Beschreibung JavaScript
Kanalkontext der Registerkarte Dieses Beispiel veranschaulicht die Funktionen einer Registerkartenanwendung, die das Registerkartenkontextobjekt speziell für private und freigegebene Kanäle in Microsoft Teams zeigt. Benutzer können JSON-Slices aus dem Kontextobjekt erweitern und kopieren, wodurch basierend auf dem Kanaltyp wertvolle Erkenntnisse gewonnen werden. Anzeigen

Siehe auch