Share via


Benutzerdefinierter Azure Fluid Relay-Dienst


Obwohl Sie es wahrscheinlich bevorzugen, unseren kostenlosen gehosteten Dienst zu verwenden, ist es in einigen Situationen von Vorteil, Ihren eigenen Azure Fluid Relay-Dienst für Ihre Live Share-App zu verwenden.

Voraussetzungen

  1. Erstellen Sie einen Besprechungsseitenbereich, und stellen Sie eine App-Besprechungserweiterung bereit, wie im Würfelroller-Tutorial gezeigt.
  2. Aktualisieren Sie Ihr App-Manifest, um alle erforderlichen Berechtigungen einzuschließen.
  3. Stellen Sie einen Azure Fluid Relay-Dienst wie in diesem Tutorial beschrieben zur Verfügung.

Herstellen einer Verbindung mit dem Azure Fluid Relay-Dienst

Wenn Sie initialisieren LiveShareClient, können Sie ihre eigene AzureConnectionConfigdefinieren. Live Share verknüpft Container, die Sie mit Besprechungen erstellen, aber Sie müssen die ITokenProvider Schnittstelle implementieren, um Token für Ihre Container zu signieren. In diesem Beispiel wird die Azure-Instanz AzureFunctionTokenProvidererläutert, die eine Azure-Cloudfunktion verwendet, um ein Zugriffstoken von einem Server anzufordern.

import { LiveShareClient, LivePresence } from "@microsoft/live-share";
import { LiveShareHost } from "@microsoft/teams-js";
import { SharedMap } from "fluid-framework";
import { AzureFunctionTokenProvider } from "@fluidframework/azure-client";

// Define a custom connection for your app
const options = {
  connection: {
    tenantId: "MY_TENANT_ID",
    tokenProvider: new AzureFunctionTokenProvider(
      "MY_SERVICE_ENDPOINT_URL" + "/api/GetAzureToken",
      { userId: "userId", userName: "Test User" }
    ),
    endpoint: "MY_SERVICE_ENDPOINT_URL",
    type: "remote",
  },
};
// Join the Fluid container
const host = LiveShareHost.create();
const liveShare = new LiveShareClient(host, options);
const schema = {
  initialObjects: {
    presence: LivePresence,
    ticTacToePositions: SharedMap,
  },
};
const { container } = await liveShare.joinContainer(schema);

// ... ready to start app sync logic

Gründe für die Verwendung eines benutzerdefinierten Azure Fluid Relay-Diensts

Erwägen Sie die Verwendung einer benutzerdefinierten AFR-Dienstverbindung, wenn Sie:

  • Die Speicherung von Daten in Fluid-Containern ist über die Lebensdauer einer Besprechung hinaus erforderlich.
  • Übertragen Sie vertrauliche Daten über den Dienst, für den eine benutzerdefinierte Sicherheitsrichtlinie erforderlich ist.
  • Entwickeln Sie Features über Fluid Framework für Ihre Anwendung außerhalb von Teams.

Gründe für die Verwendung von Live Share mit Ihrem benutzerdefinierten Dienst

Azure Fluid Relay ist für die Arbeit mit jeder webbasierten Anwendung konzipiert, was bedeutet, dass es mit oder ohne Microsoft Teams funktioniert. Dies wirft eine wichtige Frage auf: Wenn ich meinen eigenen Azure Fluid Relay-Dienst erstelle, benötige ich dann noch Live Share?

Live Share verfügt über Features, die für gängige Besprechungsszenarien von Vorteil sind, die andere Features in Ihrer App erweitern, einschließlich:

Containerzuordnung

Der LiveShareClient in @microsoft/live-share ist für die Zuordnung eines eindeutigen Besprechungsbezeichners zu Ihren Fluid-Containern verantwortlich, wodurch sichergestellt wird, dass alle Besprechungsteilnehmer demselben Container beitreten. Im Rahmen dieses Prozesses versucht der Client, eine Verbindung mit einer containerId herzustellen, die der Besprechung zugeordnet ist, die bereits vorhanden ist. Wenn kein Container vorhanden ist, wird verwendet AzureClient , um einen Container mit Ihrer AzureConnectionConfig zu erstellen und dann an containerId andere Besprechungsteilnehmer weiterzu leiten.

Wenn Ihre App bereits über einen Mechanismus zum Erstellen von Fluid-Containern und deren Freigabe für andere Mitglieder verfügt, z. B. durch Einfügen von containerId in die URL, die für die Besprechungsphase freigegeben wurde, ist dies für Ihre App möglicherweise nicht erforderlich.

Liveobjekte und Rollenüberprüfung

Live Share-Datenstrukturen wie LivePresence, LiveStateund LiveEvent sind auf die Zusammenarbeit in Besprechungen zugeschnitten und werden daher in Fluid-Containern, die außerhalb von Microsoft Teams verwendet werden, nicht unterstützt. Features wie die Rollenüberprüfung helfen Ihrer App dabei, die Erwartungen unserer Benutzer zu erfüllen.

Hinweis

Ein zusätzlicher Vorteil ist, dass Liveobjekte im Vergleich zu herkömmlichen Fluid-Datenstrukturen auch schnellere Nachrichtenlatenz aufweisen.

Weitere Informationen finden Sie auf der Seite "Kernfunktionen" .

Verwenden von Live Share ohne LiveShareClient

Sie können Live Share auch dann verwenden, wenn Sie die LiveShareClient -Klasse nicht für Ihren benutzerdefinierten Azure Fluid Relay-Dienst verwenden möchten. Dies ist hilfreich, wenn Sie steuern möchten, wann ein Container erstellt wird oder wie er für Besprechungsteilnehmer freigegeben wird.

Im Folgenden finden Sie ein Beispiel dafür, wie Sie dies in Ihrer Anwendung tun können:

import {
  LiveShareClient,
  LivePresence,
  getLiveShareContainerSchemaProxy,
} from "@microsoft/live-share";
import { SharedMap } from "fluid-framework";
import {
  AzureFunctionTokenProvider,
  AzureClient,
} from "@fluidframework/azure-client";
import { LiveShareHost } from "@microsoft/teams-js";

// Define a custom connection for your app
const options = {
  connection: {
    tenantId: "MY_TENANT_ID",
    tokenProvider: new AzureFunctionTokenProvider(
      "MY_SERVICE_ENDPOINT_URL" + "/api/GetAzureToken",
      { userId: "userId", userName: "Test User" }
    ),
    endpoint: "MY_SERVICE_ENDPOINT_URL",
    type: "remote",
  },
};
// Initialize your AzureClient instance
const client = new AzureClient(options);
// Define your Fluid schema
const schema = {
  initialObjects: {
    presence: LivePresence,
    ticTacToePositions: SharedMap,
  },
};
// Create your host
const host = LiveShareHost.create();
// Create the LiveShareRuntime, which is needed for `LiveDataObject` instances to work
const runtime = new LiveShareRuntime(this._host);
// Inject the LiveShareRuntime dependency into the ContainerSchema
const injectedSchema = getLiveShareContainerSchemaProxy(
    schema,
    runtime,
);
// Create (or get) your container
const { container } = await client.createContainer(injectedSchema);

// ... ready to start app sync logic

Alternativ können Sie verwenden AzureLiveShareHostoder überschreiben. Auf diese Weise können Sie benutzerdefinierte Benutzeranzeigenamen und -rollen aus Ihrem AzureAudienceund nicht über Microsoft Teams abrufen.

import {
  LiveShareClient,
  LivePresence,
  AzureLiveShareHost,
  getLiveShareContainerSchemaProxy,
} from "@microsoft/live-share";
import { SharedMap } from "fluid-framework";
import {
  AzureFunctionTokenProvider,
  AzureClient,
} from "@fluidframework/azure-client";

// Define a custom connection for your app
const options = {
  connection: {
    tenantId: "MY_TENANT_ID",
    tokenProvider: new AzureFunctionTokenProvider(
      "MY_SERVICE_ENDPOINT_URL" + "/api/GetAzureToken",
      { userId: "userId", userName: "Test User" }
    ),
    endpoint: "MY_SERVICE_ENDPOINT_URL",
    type: "remote",
  },
};
// Initialize your AzureClient instance
const client = new AzureClient(options);
// Define your Fluid schema
const schema = {
  initialObjects: {
    presence: LivePresence,
    ticTacToePositions: SharedMap,
  },
};
// Create your AzureLiveShareHost
const host = AzureLiveShareHost.create();
// Create the LiveShareRuntime, which is needed for `LiveDataObject` instances to work
const runtime = new LiveShareRuntime(this._host);
// Inject the LiveShareRuntime dependency into the ContainerSchema
const injectedSchema = getLiveShareContainerSchemaProxy(
    schema,
    runtime,
);
// Create (or get) your container
const { container } = await client.createContainer(injectedSchema);
// Set AzureAudience into the AzureLiveShareHost
host.setAudience(services.audience);

// ... ready to start app sync logic

Viele Live Share-APIs hängen von einer globalen Zeitstempel-API ab, mit der Objekte die Reihenfolge von Remotenachrichten bestimmen können LiveDataObject . Wenn Sie Datenstrukturen verwenden, die auf der TimestampProvider -Klasse basieren, müssen Sie entweder die LiveShareHost aus der teams-js Bibliothek verwenden oder die getTimestamp() Funktion in AzureLiveShareHost mit einem vom Server zurückgegebenen Wert überschreiben.

Siehe auch