Dela via


Observera användarens funktioner

Har jag behörighet att aktivera video, har jag behörighet att aktivera mikrofon, har jag behörighet att dela skärmen? Dessa behörigheter är exempel på deltagarfunktioner som du kan lära dig från api:et för funktioner. Genom att lära dig funktionerna kan du skapa ett användargränssnitt som bara visar knapparna som är relaterade till de åtgärder som den lokala användaren har behörighet till.

Förutsättningar

Installera SDK:n

npm install Använd kommandot för att installera Azure Communication Services Common och Calling SDK för JavaScript:

npm install @azure/communication-common --save
npm install @azure/communication-calling --save

Initiera nödvändiga objekt

En CallClient instans krävs för de flesta anropsåtgärder. När du skapar en ny CallClient instans kan du konfigurera den med anpassade alternativ som en Logger instans.

Med instansen CallClient kan du skapa en CallAgent instans genom att anropa createCallAgent. Den här metoden returnerar asynkront ett CallAgent instansobjekt.

Metoden createCallAgent använder CommunicationTokenCredential som argument. Den accepterar en användaråtkomsttoken.

Du kan använda getDeviceManager metoden på instansen CallClient för att få åtkomst deviceManagertill .

const { CallClient } = require('@azure/communication-calling');
const { AzureCommunicationTokenCredential} = require('@azure/communication-common');
const { AzureLogger, setLogLevel } = require("@azure/logger");

// Set the logger's log level
setLogLevel('verbose');

// Redirect log output to console, file, buffer, REST API, or whatever location you want
AzureLogger.log = (...args) => {
    console.log(...args); // Redirect log output to console
};

const userToken = '<USER_TOKEN>';
callClient = new CallClient(options);
const tokenCredential = new AzureCommunicationTokenCredential(userToken);
const callAgent = await callClient.createCallAgent(tokenCredential, {displayName: 'optional Azure Communication Services user name'});
const deviceManager = await callClient.getDeviceManager()

Så här hanterar du SDK-anslutning till Microsoft-infrastruktur på bästa sätt

Instansen Call Agent hjälper dig att hantera anrop (för att ansluta eller starta samtal). För att kunna arbeta måste din anropande SDK ansluta till Microsofts infrastruktur för att få meddelanden om inkommande samtal och samordna annan samtalsinformation. Du Call Agent har två möjliga tillstånd:

Ansluten – Ett Call Agent connectionStatue-värde Connected innebär att klient-SDK:t är anslutet och kan ta emot meddelanden från Microsofts infrastruktur.

Frånkopplad – Ett Call Agent connectionStatue-värde för Disconnected tillstånd det finns ett problem som hindrar SDK:n från att ansluta korrekt. Call Agent ska återskapas.

  • invalidToken: Om en token har upphört att gälla eller om en ogiltig Call Agent instans kopplas från med det här felet.
  • connectionIssue: Om det finns ett problem med att klienten ansluter till Microsoft-infrastrukturen, efter att många återförsök Call Agent har exponerat connectionIssue felet.

Du kan kontrollera om din lokala Call Agent är ansluten till Microsofts infrastruktur genom att granska det aktuella värdet för connectionState egenskapen. Under ett aktivt anrop kan du lyssna på connectionStateChanged händelsen för att avgöra om Call Agent det ändras från Anslutet till frånkopplat tillstånd.

const connectionState = callAgentInstance.connectionState;
console.log(connectionState); // it may return either of 'Connected' | 'Disconnected'

const connectionStateCallback = (args) => {
    console.log(args); // it will return an object with oldState and newState, each of having a value of either of 'Connected' | 'Disconnected'
    // it will also return reason, either of 'invalidToken' | 'connectionIssue'
}
callAgentInstance.on('connectionStateChanged', connectionStateCallback);

Funktionsfunktionen är en utökad funktion i kärn-API Call :et och gör att du kan hämta funktionerna för den lokala deltagaren i det aktuella anropet.

Med funktionen kan du registrera dig för en händelselyssnare för att lyssna på funktionsändringar.

Registrera dig för funktionsfunktionen:

const capabilitiesFeature = this.call.feature(Features.Capabilities);

Hämta funktionerna för den lokala deltagaren: Kapacitetsobjektet har de lokala deltagarnas funktioner och är av typen ParticipantCapabilities. Egenskaper för funktioner är:

  • isPresent anger om det finns en funktion.
  • orsak anger orsak till kapacitetsmatchning.
const capabilities =  capabilitiesFeature.capabilities;

capabilitiesChanged Prenumerera på händelse:

capabilitiesFeature.on('capabilitiesChanged', (capabilitiesChangeInfo) => {
    for (const [key, value] of Object.entries(capabilitiesChangeInfo.newValue)) {
        if(key === 'turnVideoOn' && value.reason != 'FeatureNotSupported') {
             (value.isPresent) ? this.setState({ canOnVideo: true }) : this.setState({ canOnVideo: false });
             continue;
        }
        if(key === 'unmuteMic' && value.reason != 'FeatureNotSupported') {
            (value.isPresent) ? this.setState({ canUnMuteMic: true }) : this.setState({ canUnMuteMic: false });
            continue;
        }
        if(key === 'shareScreen' && value.reason != 'FeatureNotSupported') {
            (value.isPresent) ? this.setState({ canShareScreen: true }) : this.setState({ canShareScreen: false });
            continue;
        }
        if(key === 'spotlightParticipant' && value.reason != 'FeatureNotSupported') {
            (value.isPresent) ? this.setState({ canSpotlight: true }) : this.setState({ canSpotlight: false });
            continue;
        }
        if(key === 'raiseHand' && value.reason != 'FeatureNotSupported') {
            (value.isPresent) ? this.setState({ canRaiseHands: true }) : this.setState({ canRaiseHands: false });
            continue;
        }
        if(key === 'muteOthers' && value.reason != 'FeatureNotSupported') {
            (value.isPresent) ? this.setState({ canMuteOthers: true }) : this.setState({ canMuteOthers: false });
            continue;
        }
        if(key === 'reaction' && value.reason != 'FeatureNotSupported') {
            (value.isPresent) ? this.setState({ canReact: true }) : this.setState({ canReact: false });
            continue;
        }
    }
});

Funktioner som exponeras

  • turnVideoOn: Möjlighet att aktivera video
  • unmuteMic: Möjlighet att aktivera mikrofon
  • shareScreen: Möjlighet att dela skärm
  • removeParticipant: Möjlighet att ta bort en deltagare
  • hangUpForEveryOne: Möjlighet att lägga på för alla
  • addCommunicationUser: Möjlighet att lägga till en kommunikationsanvändare
  • addTeamsUser: Möjlighet att lägga till Teams-användare
  • addPhoneNumber: Möjlighet att lägga till telefonnummer
  • manageLobby: Möjlighet att hantera lobbyn (endast beta)
  • spotlightParticipant: Möjlighet att lyfta fram deltagare (endast beta)
  • removeParticipantsSpotlight: Möjlighet att ta bort deltagarens spotlight (endast beta)
  • startLiveCaptions: Möjlighet att starta livetexter (endast beta)
  • stopLiveCaptions: Möjlighet att stoppa livetexter (endast beta)
  • raiseHand: Möjlighet att höja handen (endast beta)
  • muteOthers: Möjlighet att mjukt stänga av fjärrdeltagare i mötet
  • reaktion: Förmåga att reagera i mötet (endast beta)
  • viewAttendeeNames: Möjlighet att visa deltagarnas namn i mötet

Installera SDK:n

Leta upp filen på projektnivå build.gradle och lägg till mavenCentral() i listan med lagringsplatser under buildscript och allprojects:

buildscript {
    repositories {
    ...
        mavenCentral()
    ...
    }
}
allprojects {
    repositories {
    ...
        mavenCentral()
    ...
    }
}

Lägg sedan till följande rader i modulnivåfilen build.gradle i dependencies avsnittet:

dependencies {
    ...
    implementation 'com.azure.android:azure-communication-calling:1.0.0'
    ...
}

Initiera nödvändiga objekt

Om du vill skapa en CallAgent instans måste du anropa createCallAgent metoden på en CallClient instans. Det här anropet returnerar asynkront ett CallAgent instansobjekt.

Metoden createCallAgent tar CommunicationUserCredential som ett argument som kapslar in en åtkomsttoken.

Om du vill komma åt DeviceManagermåste du skapa en callAgent instans först. Sedan kan du använda CallClient.getDeviceManager metoden för att hämta DeviceManager.

String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an activity, for instance
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential).get();
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();

Om du vill ange ett visningsnamn för anroparen använder du den här alternativa metoden:

String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an activity, for instance
CallAgentOptions callAgentOptions = new CallAgentOptions();
callAgentOptions.setDisplayName("Alice Bob");
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential, callAgentOptions).get();

Funktionsfunktionen är en utökad funktion i kärn-API Call :et och gör att du kan hämta funktionerna för den lokala deltagaren i det aktuella anropet.

Med funktionen kan du registrera dig för en händelselyssnare för att lyssna på funktionsändringar.

För att kunna använda funktionsanropsfunktionen för Windows är det första steget att hämta API-objektet funktioner:

Hämta funktioner

private CapabilitiesCallFeature capabilitiesCallFeature;
capabilitiesCallFeature = call.feature(Features.CAPABILITIES);

Hämta funktionerna för den lokala deltagaren

Funktionsobjektet har de lokala deltagarnas funktioner och är av typen ParticipantCapability. Egenskaper för funktioner är:

  • isAllowed anger om en funktion kan användas.
  • orsak anger orsak till kapacitetsmatchning.
List<ParticipantCapability> capabilities = capabilitiesCallFeature.getCapabilities();

capabilitiesChanged Prenumerera på händelse


capabilitiesCallFeature.addOnCapabilitiesChangedListener(this::OnCapabilitiesChanged);

private void OnCapabilitiesChanged(CapabilitiesChangedEvent args)
{
    String event = String.format("Capabilities Event: %s", args.getReason().toString());
    Log.i("CapabilitiesInfo", event);
    for (ParticipantCapability capability : args.getChangedCapabilities())
    {
        Log.i("CapabilitiesInfo", capability.getType().toString() + " is " capability.getReason().toString());
    }
}

Funktioner som exponeras

  • TurnVideoOn: Möjlighet att aktivera video
  • UnmuteMicrophone: Möjlighet att slå på mikrofonen
  • ShareScreen: Möjlighet att dela skärm
  • RemoveParticipant: Möjlighet att ta bort en deltagare
  • HangUpForEveryone: Möjlighet att lägga på för alla
  • AddCommunicationUser: Möjlighet att lägga till en kommunikationsanvändare
  • AddTeamsUser: Möjlighet att lägga till Teams-användare
  • AddPhoneNumber: Möjlighet att lägga till telefonnummer
  • ManageLobby: Möjlighet att hantera lobbyn
  • SpotlightParticipant: Möjlighet att lyfta fram deltagare
  • RemoveParticipantSpotlight: Möjlighet att ta bort deltagarens spotlight
  • BlurBackground: Möjlighet att sudda ut bakgrund
  • CustomBackground: Möjlighet att använda en anpassad bakgrund
  • StartLiveCaptions: Möjlighet att starta livetexter
  • RaiseHand: Möjlighet att höja handen
  • MuteOthers: Möjlighet att stänga av fjärrdeltagare i mötet

Konfigurera systemet

Följ de här stegen för att konfigurera systemet.

Skapa Visual Studio-projektet

För en Universell Windows-plattform app skapar du i Visual Studio 2022 ett nytt projekt för Tom app (Universell Windows). När du har angett projektnamnet kan du välja valfri Windows SDK senare än 10.0.17763.0.

För en WinUI 3-app skapar du ett nytt projekt med mallen Tom app, Paketerad (WinUI 3 i Desktop) för att konfigurera en WinUI 3-app med en enda sida. SDK för Windows-appar version 1.3 eller senare krävs.

Installera paketet och beroendena med hjälp av NuGet Package Manager

Anropande SDK-API:er och bibliotek är offentligt tillgängliga via ett NuGet-paket.

Så här hittar du, laddar ned och installerar det anropande SDK NuGet-paketet:

  1. Öppna NuGet Package Manager genom att välja Verktyg>NuGet Package Manager>Hantera NuGet-paket för lösning.
  2. Välj Bläddra och ange sedan Azure.Communication.Calling.WindowsClient i sökrutan.
  3. Kontrollera att kryssrutan Inkludera förhandsversion är markerad.
  4. Välj paketet Azure.Communication.Calling.WindowsClient och välj sedan Azure.Communication.Calling.WindowsClient 1.4.0-beta.1 eller en nyare version.
  5. Markera kryssrutan som motsvarar Azure Communication Services-projektet i den högra rutan.
  6. Välj Installera.

Funktionsfunktionen är en utökad funktion i kärn-API Call :et och gör att du kan hämta funktionerna för den lokala deltagaren i det aktuella anropet.

Med funktionen kan du registrera dig för en händelselyssnare för att lyssna på funktionsändringar.

För att kunna använda funktionsanropsfunktionen för Windows är det första steget att hämta API-objektet funktioner:

Hämta funktioner

private CapabilitiesCallFeature capabilitiesCallFeature;
capabilitiesCallFeature = call.Features.Capabilities;

Hämta funktionerna för den lokala deltagaren

Funktionsobjektet har de lokala deltagarnas funktioner och är av typen ParticipantCapability. Egenskaper för funktioner är:

  • isAllowed anger om en funktion kan användas.
  • orsak anger orsak till kapacitetsmatchning.
var capabilities = capabilitiesCallFeature.Capabilities;

capabilitiesChanged Prenumerera på händelse

capabilitiesCallFeature.CapabilitiesChanged += Call__OnCapabilitiesChangedAsync;

private async void Call__OnCapabilitiesChangedAsync(object sender, CapabilitiesChangedEventArgs args)
{
    Trace.WriteLine(args.Reason.ToString());
    foreach (var capability in args.ChangedCapabilities)
    {
        //Prints out capability kind and resolution reason in console
        Trace.WriteLine(capability.Kind.ToString() + " is " + capability.Reason.ToString());
    }
}

Funktioner som exponeras

  • TurnVideoOn: Möjlighet att aktivera video
  • UnmuteMicrophone: Möjlighet att slå på mikrofonen
  • ShareScreen: Möjlighet att dela skärm
  • RemoveParticipant: Möjlighet att ta bort en deltagare
  • HangUpForEveryone: Möjlighet att lägga på för alla
  • AddCommunicationUser: Möjlighet att lägga till en kommunikationsanvändare
  • AddTeamsUser: Möjlighet att lägga till Teams-användare
  • AddPhoneNumber: Möjlighet att lägga till telefonnummer
  • ManageLobby: Möjlighet att hantera lobbyn
  • SpotlightParticipant: Möjlighet att lyfta fram deltagare
  • RemoveParticipantSpotlight: Möjlighet att ta bort deltagarens spotlight
  • BlurBackground: Möjlighet att sudda ut bakgrund
  • CustomBackground: Möjlighet att använda en anpassad bakgrund
  • StartLiveCaptions: Möjlighet att starta livetexter
  • RaiseHand: Möjlighet att höja handen
  • MuteOthers: Möjlighet att stänga av fjärrdeltagare i mötet

Konfigurera systemet

Följ de här stegen för att konfigurera systemet.

Skapa Xcode-projektet

I Xcode skapar du ett nytt iOS-projekt och väljer mallen Enkel vyapp . Den här artikeln använder SwiftUI-ramverket, så du bör ange Language till Swift och ange Gränssnitt till SwiftUI.

Du kommer inte att skapa tester i den här artikeln. Avmarkera kryssrutan Inkludera tester .

Skärmbild som visar fönstret för att skapa ett projekt i Xcode.

Installera paketet och beroenden med hjälp av CocoaPods

  1. Skapa en Podfile för ditt program, som i det här exemplet:

    platform :ios, '13.0'
    use_frameworks!
    target 'AzureCommunicationCallingSample' do
        pod 'AzureCommunicationCalling', '~> 1.0.0'
    end
    
  2. Kör pod install.

  3. Öppna .xcworkspace med Xcode.

Begär åtkomst till mikrofonen

För att få åtkomst till enhetens mikrofon måste du uppdatera appens egenskapslista för information med hjälp NSMicrophoneUsageDescriptionav . Ange det associerade värdet till en sträng som ingår i dialogrutan som systemet använder för att begära åtkomst från användaren.

Högerklicka på posten Info.plist i projektträdet och välj sedan Öppna som>källkod. Lägg till följande rader i avsnittet på den översta nivån <dict> och spara sedan filen.

<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>

Konfigurera appramverket

Öppna projektets ContentView.swift fil. Lägg till en import deklaration överst i filen för att importera AzureCommunicationCalling biblioteket. Importera dessutom AVFoundation. Du behöver den för begäranden om ljudbehörighet i koden.

import AzureCommunicationCalling
import AVFoundation

Initiera CallAgent

Om du vill skapa en CallAgent instans från CallClientmåste du använda en callClient.createCallAgent metod som asynkront returnerar ett CallAgent objekt när det har initierats.

Skicka ett CommunicationTokenCredential objekt för att skapa en anropsklient:

import AzureCommunication

let tokenString = "token_string"
var userCredential: CommunicationTokenCredential?
do {
    let options = CommunicationTokenRefreshOptions(initialToken: token, refreshProactively: true, tokenRefresher: self.fetchTokenSync)
    userCredential = try CommunicationTokenCredential(withOptions: options)
} catch {
    updates("Couldn't created Credential object", false)
    initializationDispatchGroup!.leave()
    return
}

// tokenProvider needs to be implemented by Contoso, which fetches a new token
public func fetchTokenSync(then onCompletion: TokenRefreshOnCompletion) {
    let newToken = self.tokenProvider!.fetchNewToken()
    onCompletion(newToken, nil)
}

Skicka objektet CommunicationTokenCredential som du skapade till CallClientoch ange visningsnamnet:

self.callClient = CallClient()
let callAgentOptions = CallAgentOptions()
options.displayName = " iOS Azure Communication Services User"

self.callClient!.createCallAgent(userCredential: userCredential!,
    options: callAgentOptions) { (callAgent, error) in
        if error == nil {
            print("Create agent succeeded")
            self.callAgent = callAgent
        } else {
            print("Create agent failed")
        }
})

Funktionsfunktionen är en utökad funktion i kärn-API Call :et och gör att du kan hämta funktionerna för den lokala deltagaren i det aktuella anropet.

Med funktionen kan du registrera dig för en händelselyssnare för att lyssna på funktionsändringar.

För att kunna använda funktionsanropsfunktionen för Windows är det första steget att hämta API-objektet funktioner:

Hämta funktioner

let capabilitiesCallFeature =call.feature(Features.capabilities)

Hämta funktionerna för den lokala deltagaren

Funktionsobjektet har de lokala deltagarnas funktioner och är av typen ParticipantCapability. Egenskaper för funktioner är:

  • isAllowed anger om en funktion kan användas.
  • orsak anger orsak till kapacitetsmatchning.
var capabilities = capabilitiesCallFeature.capabilities

capabilitiesChanged Prenumerera på händelse


capabilitiesCallFeature.delegate = CapabilitiesCallDelegate()

public class CapabilitiesCallDelegate : CapabilitiesCallFeatureDelegate
{
    public func capabilitiesCallFeature(_ capabilitiesCallFeature: CapabilitiesCallFeature, didChangeCapabilities args: CapabilitiesChangedEventArgs) {
        let changedReason = args.reason
        let changedCapabilities = args.changedCapabilities
    }
}

Funktioner som exponeras

  • TurnVideoOn: Möjlighet att aktivera video
  • UnmuteMicrophone: Möjlighet att slå på mikrofonen
  • ShareScreen: Möjlighet att dela skärm
  • RemoveParticipant: Möjlighet att ta bort en deltagare
  • HangUpForEveryone: Möjlighet att lägga på för alla
  • AddCommunicationUser: Möjlighet att lägga till en kommunikationsanvändare
  • AddTeamsUser: Möjlighet att lägga till Teams-användare
  • AddPhoneNumber: Möjlighet att lägga till telefonnummer
  • ManageLobby: Möjlighet att hantera lobbyn
  • SpotlightParticipant: Möjlighet att lyfta fram deltagare
  • RemoveParticipantSpotlight: Möjlighet att ta bort deltagarens spotlight
  • BlurBackground: Möjlighet att sudda ut bakgrund
  • CustomBackground: Möjlighet att använda en anpassad bakgrund
  • StartLiveCaptions: Möjlighet att starta livetexter
  • RaiseHand: Möjlighet att höja handen
  • MuteOthers: Möjlighet att stänga av fjärrdeltagare i mötet

Samtalstyper som stöds

Funktionen stöds för närvarande endast för Samtalstyp för Azure Communication Services Rooms och mötessamtalstyp för team

Orsaker

Följande tabell innehåller ytterligare information om varför åtgärden inte är tillgänglig och innehåller tips om hur du gör åtgärden tillgänglig.

Anledning beskrivning Åtgärd
Kapabel Åtgärden tillåts.
CapabilityNotApplicableForTheCallType Anropstypen blockerar åtgärden. Överväg andra typer av anrop om du behöver den här åtgärden. Samtalstyperna är: 1:1-samtal, gruppsamtal, 1:1 Teams interop-samtal, 1:1 Teams interop-gruppsamtal, Rum och Möte.
ClientRestricted Körningsmiljön blockerar den här åtgärden Avblockera åtgärden på enheten genom att ändra operativsystem, webbläsare, plattform eller maskinvara. Du hittar miljö som stöds i vår dokumentation.
UserPolicyRestricted Microsoft 365-användarens princip blockerar åtgärden. Aktivera den här åtgärden genom att ändra en princip som har tilldelats mötesorganisatören, initieraren för samtalet eller Microsoft 365-användaren med hjälp av ACS SDK. Målanvändaren är beroende av typen av åtgärd. Läs mer om Teams-princip i Teams. Teams-administratören kan ändra principer.
RoleRestricted Tilldelad roll blockerar åtgärden. Höj upp användaren till en annan roll för att göra åtgärden tillgänglig.
FeatureNotSupported Funktionen funktioner stöds inte i den här anropstypen. Meddela oss i Azure Feedback-kanalen att du vill ha den här funktionen tillgänglig för den här samtalstypen.
MeetingRestricted Mötesalternativet Teams blockerar åtgärden. Teams mötesorganisatör eller medorganisatör måste ändra mötesalternativet för att aktivera den här åtgärden.
NotInitialized Funktionsfunktionen har inte initierats ännu. Prenumerera på this.call.feature(Features.Capabilities) händelse capabilitiesChanged om du vill veta när funktionen initieras.
NotCapable Användartypen blockerar åtgärden. Åtgärden tillåts endast till en viss typ av identitet. Aktivera den här åtgärden med hjälp av Microsoft 365-identitet.
TeamsPremiumLicenseRestricted Microsoft 365-användare måste ha Tilldelat Teams Premium-licens. Aktivera den här åtgärden genom att tilldela Teams Premium-licens till Teams mötesorganisatör eller Microsoft 365-användare med hjälp av SDK. Målanvändaren är beroende av typen av åtgärd. Microsoft 365-administratören kan tilldela nödvändig licens.
ExplicitConsentRequired Medgivande krävs för att åtgärden ska kunna utföras. Ange medgivande för inspelning eller transkription genom att anropa metoden grantTeamsConsent() under this.call.feature(Features.Recording) eller this.call.feature(Features.Transcription) .

Nästa steg