Observe as capacidades do usuário
Tenho permissão para ativar o vídeo, tenho permissão para ligar o microfone, tenho permissão para partilhar ecrã? Essas permissões são exemplos de recursos de participantes que você pode aprender com a API de recursos. Aprender os recursos pode ajudar a criar uma interface de usuário que mostre apenas os botões relacionados às ações para as quais o usuário local tem permissões.
Pré-requisitos
- Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.
- Um recurso de Serviços de Comunicação implantado. Crie um recurso de Serviços de Comunicação.
- Um token de acesso de usuário para habilitar o cliente chamador. Para obter mais informações, consulte Criar e gerenciar tokens de acesso.
- Opcional: conclua o início rápido para adicionar chamadas de voz ao seu aplicativo
Instale o SDK
Use o npm install
comando para instalar o SDK de Chamada e Comum dos Serviços de Comunicação do Azure para JavaScript:
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
Inicializar objetos necessários
Uma CallClient
instância é necessária para a maioria das operações de chamada. Ao criar uma nova CallClient
instância, você pode configurá-la com opções personalizadas, como uma Logger
instância.
Com a CallClient
instância, você pode criar uma CallAgent
instância chamando o createCallAgent
arquivo . Esse método retorna de forma assíncrona um objeto de CallAgent
instância.
O createCallAgent
método usa CommunicationTokenCredential
como argumento. Ele aceita um token de acesso de usuário.
Você pode usar o getDeviceManager
método na CallClient
instância para acessar deviceManager
o .
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()
Como gerenciar melhor a conectividade do SDK com a infraestrutura da Microsoft
A Call Agent
instância ajuda você a gerenciar chamadas (para ingressar ou iniciar chamadas). Para funcionar, seu SDK de chamada precisa se conectar à infraestrutura da Microsoft para receber notificações de chamadas recebidas e coordenar outros detalhes da chamada. O seu Call Agent
tem dois estados possíveis:
Conectado - Um Call Agent
valor connectionStatue significa que o SDK do Connected
cliente está conectado e é capaz de receber notificações da infraestrutura da Microsoft.
Desconectado - Um Call Agent
valor connectionStatue de Disconnected
estados há um problema que está impedindo o SDK de se conectar corretamente. Call Agent
devem ser recriados.
invalidToken
: Se um token expirou ou é inválidoCall Agent
, a instância se desconecta com esse erro.connectionIssue
: Se houver um problema com o cliente se conectando à infrascture da Microsoft, depois de muitas tentativasCall Agent
expõe oconnectionIssue
erro.
Você pode verificar se seu local Call Agent
está conectado à infraestrutura da Microsoft inspecionando o valor atual da connectionState
propriedade. Durante uma chamada ativa, você pode ouvir o connectionStateChanged
evento para determinar se Call Agent
muda do estado Conectado para Desconectado.
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);
O recurso de recursos é um recurso estendido da API principal Call
e permite que você obtenha os recursos do participante local na chamada atual.
O recurso permite que você se registre para um ouvinte de eventos, para ouvir as mudanças de capacidade.
Registre-se no recurso de recursos:
const capabilitiesFeature = this.call.feature(Features.Capabilities);
Obter as capacidades do participante local: O objeto Capabilities tem as capacidades dos participantes locais e é do tipo ParticipantCapabilities
. As propriedades dos recursos incluem:
- isPresent indica se uma capacidade está presente.
- razão indica o motivo da resolução de capacidade.
const capabilities = capabilitiesFeature.capabilities;
Inscreva-se no capabilitiesChanged
evento:
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;
}
}
});
Capacidades expostas
- turnVideoOn: Capacidade de ativar o vídeo
- unmuteMic: Capacidade de ligar o microfone
- shareScreen: Capacidade de compartilhar tela
- removeParticipant: Capacidade de remover um participante
- hangUpForEveryOne: Capacidade de desligar para todos
- addCommunicationUser: Capacidade de adicionar um usuário de comunicação
- addTeamsUser: Capacidade de adicionar usuário do Teams
- addPhoneNumber: Capacidade de adicionar número de telefone
- manageLobby: Capacidade de gerenciar lobby (somente beta)
- spotlightParticipant: Capacidade de destacar o Participante (apenas beta)
- removeParticipantsSpotlight: Capacidade de remover o destaque do participante (somente beta)
- startLiveCaptions: Capacidade de iniciar legendas ao vivo (somente beta)
- stopLiveCaptions: Capacidade de parar legendas ao vivo (somente beta)
- raiseHand: Capacidade de levantar a mão (apenas beta)
- muteOthers: Capacidade de silenciar suavemente o(s) participante(s) remoto(s) na reunião
- reação: Capacidade de reagir na reunião (apenas beta)
- viewAttendeeNames: Capacidade de exibir nomes de participantes na reunião
Instale o SDK
Localize seu arquivo no nível build.gradle
do projeto e adicione mavenCentral()
à lista de repositórios em buildscript
e allprojects
:
buildscript {
repositories {
...
mavenCentral()
...
}
}
allprojects {
repositories {
...
mavenCentral()
...
}
}
Em seguida, no arquivo de nível build.gradle
de módulo, adicione as seguintes linhas à dependencies
seção:
dependencies {
...
implementation 'com.azure.android:azure-communication-calling:1.0.0'
...
}
Inicializar os objetos necessários
Para criar uma CallAgent
instância, você precisa chamar o createCallAgent
método em uma CallClient
instância. Essa chamada retorna de forma assíncrona um objeto de CallAgent
instância.
O createCallAgent
método toma CommunicationUserCredential
como um argumento, que encapsula um token de acesso.
Para acessar DeviceManager
o , você deve criar uma callAgent
instância primeiro. Então você pode usar o CallClient.getDeviceManager
método para obter 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();
Para definir um nome de exibição para o chamador, use este método alternativo:
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();
O recurso de recursos é um recurso estendido da API principal Call
e permite que você obtenha os recursos do participante local na chamada atual.
O recurso permite que você se registre para um ouvinte de eventos, para ouvir as mudanças de capacidade.
Para usar o recurso de chamada Capabilities para Windows, a primeira etapa é obter o objeto da API do recurso Capabilities:
Recurso de obtenção de recursos
private CapabilitiesCallFeature capabilitiesCallFeature;
capabilitiesCallFeature = call.feature(Features.CAPABILITIES);
Obtenha as capacidades do participante local
O objeto Capabilities tem as capacidades dos participantes locais e é do tipo ParticipantCapability
. As propriedades dos recursos incluem:
- isAllowed indica se um recurso pode ser usado.
- razão indica o motivo da resolução de capacidade.
List<ParticipantCapability> capabilities = capabilitiesCallFeature.getCapabilities();
Inscreva-se no capabilitiesChanged
evento
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());
}
}
Capacidades expostas
- TurnVideoOn: Capacidade de ativar o vídeo
- UnmuteMicrophone: Capacidade de ativar o mudo do microfone
- ShareScreen: Capacidade de compartilhar tela
- RemoveParticipant: Capacidade de remover um participante
- HangUpForEveryone: Capacidade de desligar para todos
- AddCommunicationUser: Capacidade de adicionar um usuário de comunicação
- AddTeamsUser: Capacidade de adicionar usuário do Teams
- AddPhoneNumber: Capacidade de adicionar número de telefone
- ManageLobby: Capacidade de gerir o lobby
- SpotlightParticipant: Capacidade de destacar o participante
- RemoveParticipantSpotlight: Capacidade de remover o destaque do participante
- BlurBackground: Capacidade de desfocar o fundo
- CustomBackground: Capacidade de aplicar um plano de fundo personalizado
- StartLiveCaptions: Capacidade de iniciar legendas ao vivo
- RaiseHand: Capacidade de levantar a mão
- MuteOthers: Capacidade de silenciar suavemente o(s) participante(s) remoto(s) na reunião
Configure o seu sistema
Siga estes passos para configurar o seu sistema.
Criar o projeto do Visual Studio
Para um aplicativo da Plataforma Universal do Windows, no Visual Studio 2022, crie um novo projeto Aplicativo em Branco (Universal Windows). Depois de inserir o nome do projeto, sinta-se à vontade para escolher qualquer SDK do Windows posterior a 10.0.17763.0.
Para um aplicativo WinUI 3, crie um novo projeto com o modelo Aplicativo em branco, empacotado (WinUI 3 na área de trabalho) para configurar um aplicativo WinUI 3 de página única. É necessário o SDK de Aplicativos Windows versão 1.3 ou posterior.
Instalar o pacote e as dependências usando o Gerenciador de Pacotes NuGet
As APIs e bibliotecas do SDK de chamada estão disponíveis publicamente por meio de um pacote NuGet.
Para localizar, baixar e instalar o pacote NuGet do SDK de chamada:
- Abra o Gerenciador de Pacotes NuGet selecionando Ferramentas>Gerenciador>de Pacotes NuGet Gerenciar Pacotes NuGet para Solução.
- Selecione Procurar e digite Azure.Communication.Calling.WindowsClient na caixa de pesquisa.
- Verifique se a caixa de seleção Incluir pré-lançamento está marcada.
- Selecione o pacote Azure.Communication.Calling.WindowsClient e, em seguida, selecione Azure.Communication.Calling.WindowsClient 1.4.0-beta.1 ou uma versão mais recente.
- Marque a caixa de seleção que corresponde ao projeto dos Serviços de Comunicação do Azure no painel direito.
- Selecione Instalar.
O recurso de recursos é um recurso estendido da API principal Call
e permite que você obtenha os recursos do participante local na chamada atual.
O recurso permite que você se registre para um ouvinte de eventos, para ouvir as mudanças de capacidade.
Para usar o recurso de chamada Capabilities para Windows, a primeira etapa é obter o objeto da API do recurso Capabilities:
Recurso de obtenção de recursos
private CapabilitiesCallFeature capabilitiesCallFeature;
capabilitiesCallFeature = call.Features.Capabilities;
Obtenha as capacidades do participante local
O objeto Capabilities tem as capacidades dos participantes locais e é do tipo ParticipantCapability
. As propriedades dos recursos incluem:
- isAllowed indica se um recurso pode ser usado.
- razão indica o motivo da resolução de capacidade.
var capabilities = capabilitiesCallFeature.Capabilities;
Inscreva-se no capabilitiesChanged
evento
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());
}
}
Capacidades expostas
- TurnVideoOn: Capacidade de ativar o vídeo
- UnmuteMicrophone: Capacidade de ativar o mudo do microfone
- ShareScreen: Capacidade de compartilhar tela
- RemoveParticipant: Capacidade de remover um participante
- HangUpForEveryone: Capacidade de desligar para todos
- AddCommunicationUser: Capacidade de adicionar um usuário de comunicação
- AddTeamsUser: Capacidade de adicionar usuário do Teams
- AddPhoneNumber: Capacidade de adicionar número de telefone
- ManageLobby: Capacidade de gerir o lobby
- SpotlightParticipant: Capacidade de destacar o participante
- RemoveParticipantSpotlight: Capacidade de remover o destaque do participante
- BlurBackground: Capacidade de desfocar o fundo
- CustomBackground: Capacidade de aplicar um plano de fundo personalizado
- StartLiveCaptions: Capacidade de iniciar legendas ao vivo
- RaiseHand: Capacidade de levantar a mão
- MuteOthers: Capacidade de silenciar suavemente o(s) participante(s) remoto(s) na reunião
Configure o seu sistema
Siga estes passos para configurar o seu sistema.
Criar o projeto Xcode
No Xcode, crie um novo projeto iOS e selecione o modelo Single View App . Este artigo usa a estrutura SwiftUI, portanto, você deve definir Language como Swift e Interface como SwiftUI.
Você não vai criar testes neste artigo. Sinta-se à vontade para desmarcar a caixa de seleção Incluir testes .
Instale o pacote e as dependências usando o CocoaPods
Crie um Podfile para seu aplicativo, como este exemplo:
platform :ios, '13.0' use_frameworks! target 'AzureCommunicationCallingSample' do pod 'AzureCommunicationCalling', '~> 1.0.0' end
Execute o
pod install
.Abra
.xcworkspace
usando o Xcode.
Solicitar acesso ao microfone
Para acessar o microfone do dispositivo, você precisa atualizar a lista de propriedades de informações do seu aplicativo usando NSMicrophoneUsageDescription
. Defina o valor associado para uma cadeia de caracteres incluída na caixa de diálogo que o sistema usa para solicitar acesso do usuário.
Clique com o botão direito do mouse na entrada Info.plist da árvore do projeto e selecione Abrir como>código-fonte. Adicione as seguintes linhas na secção de nível <dict>
superior e, em seguida, guarde o ficheiro.
<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>
Configurar a estrutura do aplicativo
Abra o arquivo do ContentView.swift
seu projeto. Adicione uma import
declaração à parte superior do arquivo para importar a AzureCommunicationCalling
biblioteca. Além disso, importe AVFoundation
. Você precisa dele para solicitações de permissão de áudio no código.
import AzureCommunicationCalling
import AVFoundation
Inicializar o CallAgent
Para criar uma CallAgent
instância a partir do CallClient
, você precisa usar um callClient.createCallAgent
método que retorna de forma assíncrona um CallAgent
objeto depois que ele é inicializado.
Para criar um cliente de chamada, passe um CommunicationTokenCredential
objeto:
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)
}
Passe o CommunicationTokenCredential
objeto que você criou para CallClient
e defina o nome para exibição:
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")
}
})
O recurso de recursos é um recurso estendido da API principal Call
e permite que você obtenha os recursos do participante local na chamada atual.
O recurso permite que você se registre para um ouvinte de eventos, para ouvir as mudanças de capacidade.
Para usar o recurso de chamada Capabilities para Windows, a primeira etapa é obter o objeto da API do recurso Capabilities:
Recurso de obtenção de recursos
let capabilitiesCallFeature =call.feature(Features.capabilities)
Obtenha as capacidades do participante local
O objeto Capabilities tem as capacidades dos participantes locais e é do tipo ParticipantCapability
. As propriedades dos recursos incluem:
- isAllowed indica se um recurso pode ser usado.
- razão indica o motivo da resolução de capacidade.
var capabilities = capabilitiesCallFeature.capabilities
Inscreva-se no capabilitiesChanged
evento
capabilitiesCallFeature.delegate = CapabilitiesCallDelegate()
public class CapabilitiesCallDelegate : CapabilitiesCallFeatureDelegate
{
public func capabilitiesCallFeature(_ capabilitiesCallFeature: CapabilitiesCallFeature, didChangeCapabilities args: CapabilitiesChangedEventArgs) {
let changedReason = args.reason
let changedCapabilities = args.changedCapabilities
}
}
Capacidades expostas
- TurnVideoOn: Capacidade de ativar o vídeo
- UnmuteMicrophone: Capacidade de ativar o mudo do microfone
- ShareScreen: Capacidade de compartilhar tela
- RemoveParticipant: Capacidade de remover um participante
- HangUpForEveryone: Capacidade de desligar para todos
- AddCommunicationUser: Capacidade de adicionar um usuário de comunicação
- AddTeamsUser: Capacidade de adicionar usuário do Teams
- AddPhoneNumber: Capacidade de adicionar número de telefone
- ManageLobby: Capacidade de gerir o lobby
- SpotlightParticipant: Capacidade de destacar o participante
- RemoveParticipantSpotlight: Capacidade de remover o destaque do participante
- BlurBackground: Capacidade de desfocar o fundo
- CustomBackground: Capacidade de aplicar um plano de fundo personalizado
- StartLiveCaptions: Capacidade de iniciar legendas ao vivo
- RaiseHand: Capacidade de levantar a mão
- MuteOthers: Capacidade de silenciar suavemente o(s) participante(s) remoto(s) na reunião
Tipos de chamada suportados
Atualmente, o recurso é suportado apenas para o tipo de chamada das Salas dos Serviços de Comunicação do Azure e o tipo de chamada de reunião de equipes
Motivos
A tabela a seguir fornece informações adicionais sobre por que a ação não está disponível e fornece dicas sobre como disponibilizá-la.
Motivo | Description | Resolução |
---|---|---|
Capaz | A ação é permitida. | |
CapabilityNotApplicableForTheCallType | O tipo de chamada bloqueia a ação. | Considere outro tipo de chamada se precisar dessa ação. Os tipos de chamada são: chamada 1:1, chamada em grupo, chamada de interoperabilidade 1:1 Teams, chamada de grupo de interoperabilidade 1:1 Teams, Sala e Reunião. |
ClienteRestrito | O ambiente de tempo de execução está bloqueando essa ação | Desbloqueie a ação no seu dispositivo alterando o sistema operativo, navegadores, plataforma ou hardware. Você pode encontrar o ambiente suportado em nossa documentação. |
UserPolicyRestricted | A política do usuário do Microsoft 365 bloqueia a ação. | Habilite essa ação alterando a política atribuída ao organizador da reunião, ao iniciador da chamada ou ao usuário do Microsoft 365 usando o SDK do ACS. O usuário alvo depende do tipo de ação. Saiba mais sobre a política do Teams no Teams. O administrador do Teams pode alterar as políticas. |
FunçãoRestrita | A função atribuída bloqueia a ação. | Promova o usuário para diferentes funções para disponibilizar a ação. |
FeatureNotSupported | O recurso de recursos não é suportado neste tipo de chamada. | Informe-nos no canal de Comentários do Azure que gostaria de ter esta funcionalidade disponível para este tipo de chamada. |
ReuniãoRestrita | A opção Reunião de equipes bloqueia a ação. | O organizador ou coorganizador de reuniões do Teams precisa alterar a opção de reunião para habilitar essa ação. |
NotInitialized | O recurso de recursos ainda não foi inicializado. | Inscreva-se no evento capabilitiesChanged para this.call.feature(Features.Capabilities) saber quando o recurso é inicializado. |
NotCapable | O tipo de usuário bloqueia a ação. | A ação só é permitida para um tipo específico de identidade. Habilite essa ação usando a identidade do Microsoft 365. |
TeamsPremiumLicenseRestricted | O usuário do Microsoft 365 precisa ter a licença do Teams Premium atribuída. | Habilite essa ação atribuindo a licença do Teams Premium ao organizador da reunião do Teams ou ao usuário do Microsoft 365 usando o SDK. O usuário alvo depende do tipo de ação. O administrador do Microsoft 365 pode atribuir a licença necessária. |
Consentimento explícitoObrigatório | É necessário consentimento para permitir a ação. | Fornecer o consentimento para gravação ou transcrição chamando o método grantTeamsConsent() sob this.call.feature(Features.Recording) ou this.call.feature(Features.Transcription) . |