Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ihre Registerkarte benötigt Kontextinformationen, um relevante Inhalte anzuzeigen:
- Grundlegende Informationen über den Benutzer, das Team oder das Unternehmen.
- Gebietsschema- und Designinformationen.
- Die
page.idundpage.subPageIddie identifizieren, was sich auf dieser Registerkarte befindet (bekannt alsentityIdundsubEntityIdvor 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:
- Verwenden von URL-Platzhalterwerten.
- Aus dem Kontextobjekt der Microsoft Teams-JavaScript-Clientbibliothek.
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, oderglass.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.themegetContext-API dendefaultWert 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.
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 |