Compartilhar via


Guia de início rápido: introdução à Biblioteca de IU

Comece a usar a Biblioteca de IU para Serviços de Comunicação do Azure a fim de integrar experiências de comunicação rapidamente aos aplicativos. Neste guia de início rápido, saiba como integrar composições da Biblioteca de IU em um aplicativo e configurar a experiência para os usuários do aplicativo.

A Biblioteca de IU para Serviços de Comunicação renderiza uma experiência de comunicação completa diretamente no aplicativo. Ele cuida da conexão com a chamada e configura a participação do usuário na chamada nos bastidores. Como desenvolvedor, basta se preocupar com o lugar em que a experiência de comunicação será lançada. A composição leva o usuário por meio da configuração dos dispositivos deles, do ingresso na chamada e da participação nela, além da renderização de outros participantes.

Veja este vídeo para obter uma visão geral:

Observação

Para obter documentação detalhada e guias de início rápido sobre a Biblioteca da Interface do Usuário da Web, visite o Storybook da Biblioteca da Interface do Usuário na Web.

Pré-requisitos

É possível acessar os seguintes inícios rápidos

Obtenha o aplicativo Android de exemplo deste guia de início rápido na Biblioteca de IU do Android para Serviços de Comunicação do Azure de software livre.

Pré-requisitos

Configurar o projeto

Conclua as seções a seguir para configurar o projeto de início rápido.

Criar um novo aplicativo Android

No Android Studio, crie um projeto:

  1. No menu Arquivo, selecione Novo>Projeto.

  2. Em Novo Projeto, selecione o modelo de projeto Atividade Vazia.

    Captura de tela que mostra o diálogo Novo Projeto no Android Studio com a opção Atividade Vazia selecionada.

  3. Selecione Avançar.

  4. Em Atividade Vazia, nomeie o projeto como UILibraryQuickStart. Em linguagem, selecione Java/Kotlin. Para o SDK mínimo, selecione API 26: Android 8.0 (Oreo) ou posterior.

  5. Selecione Concluir.

    Captura de tela que mostra as opções do novo projeto e o botão Concluir selecionado.

Instalar os pacotes

Conclua as seções a seguir para instalar os pacotes de aplicativos necessários.

Adicionar uma dependência

No arquivo UILibraryQuickStart/app/build.gradle no nível do aplicativo (na pasta do aplicativo), adicione a seguinte dependência:

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

Adicionar repositórios Maven

Dois repositórios Maven são necessários para integrar a biblioteca:

  • MavenCentral
  • O repositório de pacotes do Azure

Para adicionar os repositórios:

  1. Nos scripts Gradle do projeto, verifique se os repositórios a seguir foram adicionados. Para Android Studio (2020.*), repositories está em settings.gradle, em dependencyResolutionManagement(Gradle version 6.8 or greater). Para versões anteriores do Android Studio (4.*), repositories está no nível do projeto build.gradle, em allprojects{}.

    // dependencyResolutionManagement
    repositories {
        ...
        mavenCentral()
        maven {
            url "https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1"
        }
        ...
    }
    
  2. Sincronize o projeto com os arquivos Gradle. Para sincronizar o projeto, no menu Arquivo, selecione Sincronizar Projeto com Arquivos Gradle.

Adicionar um botão a Activity_main.xml

No arquivo de layout app/src/main/res/layout/activity_main.xml, adicione o seguinte código para criar um botão a fim de iniciar a composição:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/startButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Launch"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Inicializar a composição

Para inicializar a composição:

  1. Acesse MainActivity.

  2. Adicione o código a seguir para inicializar os componentes de composição da chamada. Substitua "GROUP_CALL_ID" pela ID do grupo da chamada. Substitua "DISPLAY_NAME" pelo seu nome. Substitua "USER_ACCESS_TOKEN" pelo seu token.

package com.example.uilibraryquickstart

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import com.azure.android.communication.common.CommunicationTokenCredential
import com.azure.android.communication.common.CommunicationTokenRefreshOptions
import com.azure.android.communication.ui.calling.CallComposite
import com.azure.android.communication.ui.calling.CallCompositeBuilder
import com.azure.android.communication.ui.calling.models.CallCompositeGroupCallLocator
import com.azure.android.communication.ui.calling.models.CallCompositeJoinLocator
import java.util.UUID

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        val startButton: Button = findViewById(R.id.startButton)
        startButton.setOnClickListener { l -> startCallComposite() }
    }

    private fun startCallComposite() {
        val communicationTokenRefreshOptions = CommunicationTokenRefreshOptions({ fetchToken() }, true)
        val communicationTokenCredential = CommunicationTokenCredential(communicationTokenRefreshOptions)

        val locator: CallCompositeJoinLocator = CallCompositeGroupCallLocator(UUID.fromString("GROUP_CALL_ID"))
        val callComposite: CallComposite = CallCompositeBuilder()
            .applicationContext(this.applicationContext)
            .credential(communicationTokenCredential)
            .displayName("DISPLAY_NAME").build()
        
        callComposite.launch(this, locator)
    }

    private fun fetchToken(): String? {
        return "USER_ACCESS_TOKEN"
    }
}

Executar o código

No Android Studio, crie e inicie o aplicativo:

  1. Selecione Iniciar.
  2. Aceite as permissões e selecione as configurações de dispositivo, microfone e vídeo.
  3. Selecione Ingressar na chamada.

Animação GIF que mostra um exemplo de como o projeto é executado em um dispositivo Android.

Modelo de objeto

As seguintes classes e interfaces lidam com alguns dos principais recursos da interface do usuário do Android dos Serviços de Comunicação do Azure:

Nome Descrição
CallComposite Componente de composição que renderiza uma experiência de chamada com controles e galeria de participantes
CallCompositeBuilder Construtor que cria CallComposite com opções
CallCompositeJoinMeetingLocator Passado na inicialização de CallComposite para iniciar uma chamada em grupo
CallCompositeTeamsMeetingLinkLocator Passado para inicialização de CallComposite a fim de ingressar em uma reunião do Microsoft Teams
CallCompositeLocalizationOptions Injetado como opcional em CallCompositeBuilder para configurar o idioma da composição

Funcionalidade da Biblioteca de Interfaces do Usuário

Obtenha o código para criar os principais recursos de comunicação para o aplicativo Android.

Configurar a autenticação

Para configurar a autenticação, dentro da função startCallComposite, inicialize uma instância CommunicationTokenCredential. Substitua "USER_ACCESS_TOKEN" pelo valor do token de acesso.

val callComposite: CallComposite = CallCompositeBuilder().build()

val communicationTokenRefreshOptions = CommunicationTokenRefreshOptions(this::fetchToken, true)

val communicationTokenCredential = CommunicationTokenCredential(communicationTokenRefreshOptions)

Criar CallComposite

Para criar CallComposite, dentro da função startCallComposite, inicialize uma instância CallCompositeBuilder com contexto de aplicativo, credenciais e um nome de exibição.

val callComposite: CallComposite = CallCompositeBuilder()
            .applicationContext(this.applicationContext)
            .credential(communicationTokenCredential)
            .displayName("DISPLAY_NAME").build()

Configurar uma chamada em grupo

Para configurar uma chamada de grupo, inicialize um CallCompositeGroupCallLocator.

val locator = CallCompositeGroupCallLocator(UUID.fromString("GROUP_CALL_ID"))

Ingressar em uma reunião do Teams

Você pode ingressar em uma reunião do Teams usando dois mecanismos:

  • URL da reunião do Teams ou URL curto da reunião do Teams
  • ID e senha da reunião do Teams

O link da reunião do Teams pode ser recuperado usando as APIs do Graph, que estão detalhadas na documentação do Graph.

O SDK de Chamada de Serviços de Comunicação aceita um link de reunião completo do Teams. Esse link é retornado como parte do recurso onlineMeeting, acessível na propriedade joinWebUrl Você também pode obter as informações da reunião necessárias da URL Ingressar na Reunião no próprio convite da reunião do Teams.

Participe por meio do URL da reunião do Teams

Para ingressar em uma reunião do Microsoft Teams, inicialize um CallCompositeTeamsMeetingLinkLocator.

val locator = CallCompositeTeamsMeetingLinkLocator("TEAMS_MEETING_LINK")

Participe por meio do ID e senha da reunião do Teams

O CallCompositeTeamsMeetingLinkLocator localiza uma reunião usando uma ID e senha de reunião. Isso pode ser encontrado nas informações de ingresso de uma reunião do Teams. Um ID de reunião do Teams tem 12 caracteres e consiste em dígitos numéricos agrupados em três (ou seja 000 000 000 000). Uma senha consiste em 6 caracteres alfabéticos (ou seja aBcDeF). A senha diferencia maiúsculas de minúsculas.

val locator = CallCompositeTeamsMeetingIdLocator("TEAMS_MEETING_ID", "TEAMS_MEETING_PASSCODE")

Configurar uma chamada de Salas

Para configurar uma chamada de Salas dos Serviços de Comunicação do Azure, inicialize um CallCompositeRoomLocator com uma ID de sala. Enquanto estiver na tela de configuração, o CallComposite habilitará a câmera e o microfone para todos os participantes com qualquer função na sala. A função e os recursos atualizados dos participantes são recuperados dos Serviços de Comunicação do Azure assim que a chamada é conectada.

Para obter mais informações sobre Salas, como criar e gerenciar uma, confira Início Rápido de Salas

val locator = CallCompositeRoomLocator("<ROOM_ID>")

Configurar uma chamada de saída 1:N e notificações por push de chamada de entrada

A Biblioteca da Interface do Usuário dá suporte à chamada VoIP individual para discar usuários pelo identificador de comunicação. Para receber a Biblioteca da Interface do Usuário de chamada recebida, também dá suporte ao registro para notificações por push. Para saber mais sobre a integração para a plataforma Android e iOS e o uso da API, confira Como fazer uma chamada um-para-um e receber notificações por PUSH.

Iniciar a composição

Para iniciar a IU de chamada, dentro da função startCallComposite, chame launch na instância CallComposite.

callComposite.launch(activityContext, locator)

Assine os eventos de erro de CallComposite

Para receber eventos de erro, chame setOnErrorHandler com CallComposite.

Os seguintes valores de errorCode podem ser enviados ao manipulador de erro:

  • CallCompositeErrorCode.CALL_JOIN_FAILED
  • CallCompositeErrorCode.CALL_END_FAILED
  • CallCompositeErrorCode.TOKEN_EXPIRED
  • CallCompositeErrorCode.CAMERA_FAILURE
  • CallCompositeErrorCode.MICROPHONE_PERMISSION_NOT_GRANTED
  • CallCompositeErrorCode.NETWORK_CONNECTION_NOT_AVAILABLE

O exemplo a seguir mostra um evento de erro de um evento de composição com falha.

callComposite.addOnErrorEventHandler { callCompositeErrorEvent ->
    println(callCompositeErrorEvent.errorCode)
}

Aplicar configuração de tema

Para alterar a cor primária da composição, crie um estilo de tema em src/main/res/values/themes.xml and src/main/res/values-night/themes.xml usando AzureCommunicationUICalling.Theme como o tema pai. Para aplicar o tema, injete a ID do tema em CallCompositeBuilder:

<style name="MyCompany.CallComposite" parent="AzureCommunicationUICalling.Theme">
    <item name="azure_communication_ui_calling_primary_color">#27AC22</item>
    <item name="azure_communication_ui_calling_primary_color_tint10">#5EC65A</item>
    <item name="azure_communication_ui_calling_primary_color_tint20">#A7E3A5</item>
    <item name="azure_communication_ui_calling_primary_color_tint30">#CEF0CD</item>
</style>
val callComposite: CallComposite =
        CallCompositeBuilder()
            .theme(R.style.MyCompany_CallComposite)
            .build()

Aplicar configuração de localização

Para alterar o idioma da composição, use CallCompositeSupportedLocale para criar CallCompositeLocalizationOptions com Locale. Para aplicar o idioma, injete a configuração de localização em CallCompositeBuilder. Por padrão, todos os rótulos de texto usam cadeias de caracteres em inglês ( en ). Você pode usar CallCompositeLocalizationOptions para definir um valor diferente para language. Por padrão, a Biblioteca de IU inclui um conjunto de valores de language que você pode usar com componentes da interface do usuário. CallCompositeSupportedLocale oferece as localidades com suporte. Por exemplo, para acessar a localidade Inglês, você pode usar CallCompositeSupportedLocale.EN. CallCompositeSupportedLocale.getSupportedLocales() fornece uma lista de objetos de localidade para idiomas com suporte.

import com.azure.android.communication.ui.calling.models.CallCompositeLocalizationOptions
import com.azure.android.communication.ui.calling.models.CallCompositeSupportedLocale

// CallCompositeSupportedLocale provides list of supported locale
val callComposite: CallComposite =
            CallCompositeBuilder().localization(
                CallCompositeLocalizationOptions(CallCompositeSupportedLocale.EN)
            ).build()

Assinar o evento de alteração do estado de chamada CallComposite

Para receber eventos alterados de estado de chamada, chame addOnCallStateChangedEventHandler com CallComposite.

O exemplo a seguir mostra um evento para um estado de chamada alterado.

callComposite.addOnCallStateChangedEventHandler { callStateChangedEvent ->
    println(callStateChangedEvent.code)
}

Ignorar CallComposite e assinar o evento ignorado

Para receber a ação ignorar, chame addOnDismissedEventHandler com CallComposite. Para ignorar CallComposite, chame dismiss.

O exemplo a seguir mostra um evento para um estado de chamada alterado.

callComposite.addOnDismissedEventHandler { callCompositeDismissedEvent ->
    println(callCompositeDismissedEvent.errorCode)
}

callComposite.dismiss()

Mais recursos

A lista de casos de uso tem informações detalhadas sobre mais recursos.

Adicionar notificações ao aplicativo móvel

Os Serviços de Comunicação do Azure se integram à Grade de Eventos do Azure e aos Hubs de Notificação do Azure, que permitem adicionar notificações por push aos aplicativos no Azure. Você pode usar as notificações por push para enviar informações do aplicativo aos dispositivos móveis dos usuários. Você pode usar notificações por push para mostrar uma caixa de diálogo, tocar um som ou exibir a interface do usuário de chamada de entrada.

Obtenha o aplicativo iOS de exemplo deste Guia de início rápido na Biblioteca de IU do iOS dos Serviços de Comunicação do Azure de software livre.

Pré-requisitos

Configurar o projeto

Conclua as seções a seguir para configurar o projeto de início rápido.

Criar um projeto do Xcode

No Xcode, crie um novo projeto:

  1. No menu Arquivo, selecione Novo>Projeto.

  2. Em Escolher um modelo para o novo projeto, selecione a plataforma iOS e selecione o modelo de aplicativo Aplicativo. O início rápido usa os storyboards do UIKit. O início rápido não cria testes, portanto, você pode desmarcar a caixa de seleção Incluir testes.

    Captura de tela que mostra o diálogo do novo projeto do Xcode, com o iOS e o modelo de aplicativo selecionados.

  3. Em Escolher opções para o novo projeto, insira UILibraryQuickStart em nome do produto. Em interface, selecione Storyboard.

    Captura de tela que mostra a definição de novas opções de projeto no Xcode.

Instalar o pacote e as dependências

  1. (Opcional) Para MacBook com M1, instale e habilite Rosetta no Xcode.

  2. Execute pod init no diretório raiz do projeto para criar um Podfile. Se você encontrar um erro, atualize CocoaPods para a versão atual.

  3. Adicione o código a seguir ao Podfile. Substitua UILibraryQuickStart pelo nome do seu projeto.

    platform :ios, '15.0'
    
    target 'UILibraryQuickStart' do
        use_frameworks!
        pod 'AzureCommunicationUICalling'
    end
    
  4. Execute pod install --repo-update.

  5. No Xcode, abra o arquivo gerado.xcworkspace*.

Solicitar acesso ao hardware do dispositivo

Para acessar o hardware do dispositivo, incluindo o microfone e a câmera, atualize a lista de propriedades de informações do seu aplicativo. Defina o valor associado a uma cadeia de caracteres incluída na caixa de diálogo que o sistema usa para solicitar acesso do usuário.

  1. 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 linhas a seguir ao nível superior da seção <dict> e, em seguida, salve o arquivo.

    <key>NSCameraUsageDescription</key>
    <string></string>
    <key>NSMicrophoneUsageDescription</key>
    <string></string>
    

    Aqui está um exemplo do código-fonte Info.plist em um arquivo do Xcode:

    Captura de tela que mostra um exemplo do código fonte Info.plist em um arquivo do Xcode.

  2. Para verificar se as solicitações de permissão do dispositivo foram adicionadas corretamente, selecione Abrir como>Lista de propriedades. Verifique se a lista de propriedades de informações é semelhante ao exemplo a seguir:

    Captura de tela que mostra a privacidade do dispositivo de câmera e microfone no Xcode.

Desligar o BitCode

No projeto do Xcode, em Configurações de Build, defina a opção Habilitar Bitcode como Não. Para localizar a configuração, altere o filtro de Básico para Todos ou use a barra de pesquisa.

Captura de tela que mostra a opção Configurações de compilação para desativar o Bitcode.

Inicializar a composição

Para inicializar a composição:

  1. Acesse ViewController.

  2. Adicione o código a seguir para inicializar os componentes de composição de uma chamada. Substitua <GROUP_CALL_ID> pela ID do grupo para sua chamada ou UUID() para gerar uma ID de grupo para a chamada. Substitua <DISPLAY_NAME> pelo seu nome. (O limite de comprimento da cadeia de caracteres de <DISPLAY_NAME> é de 256 caracteres.) Substitua <USER_ACCESS_TOKEN> pelo token de acesso.

    import UIKit
    import AzureCommunicationCalling
    import AzureCommunicationUICalling
    
    class ViewController: UIViewController {
    
        private var callComposite: CallComposite?
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let button = UIButton(frame: CGRect(x: 100, y: 100, width: 200, height: 50))
            button.contentEdgeInsets = UIEdgeInsets(top: 10.0, left: 20.0, bottom: 10.0, right: 20.0)
            button.layer.cornerRadius = 10
            button.backgroundColor = .systemBlue
            button.setTitle("Start Experience", for: .normal)
            button.addTarget(self, action: #selector(startCallComposite), for: .touchUpInside)
    
            button.translatesAutoresizingMaskIntoConstraints = false
            self.view.addSubview(button)
            button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
            button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        }
    
        @objc private func startCallComposite() {
            let callCompositeOptions = CallCompositeOptions(displayName: "<DISPLAY_NAME>")
            let communicationTokenCredential = try! CommunicationTokenCredential(token: "<USER_ACCESS_TOKEN>")
    
            callComposite = CallComposite(credential: communicationTokenCredential, withOptions: callCompositeOptions)
    
            callComposite?.launch(locator: .groupCall(groupId: UUID(uuidString: "<GROUP_CALL_ID>")!))
        }
    }
    

Executar o código

Para criar e executar o aplicativo no simulador de iOS selecione Produto>Executar ou use o atalho de teclado (⌘-R). Em seguida, experimente a experiência de chamada no simulador:

  1. Selecione Iniciar experiência.

  2. Aceite permissões de áudio e, em seguida, selecione as configurações de dispositivo, microfone e vídeo.

  3. Selecione Iniciar chamada.

Animação GIF que demonstra a aparência final do início rápido do aplicativo iOS.

Modelo de objeto

As seguintes classes e as interfaces administram alguns dos principais recursos da biblioteca de clientes da interface do usuário dos Serviços de Comunicação do Azure:

Nome Descrição
CallComposite Componente que renderiza uma experiência de chamada com controles e galeria de participantes
CallCompositeOptions Configurações para opções como temas e manipulação de eventos
ThemeOptions Opções de personalização para o tema da composição
LocalizationOptions Opções de linguagem para a composição

Funcionalidade da Biblioteca de Interfaces do Usuário

Obtenha o código para criar os principais recursos de comunicação para o aplicativo iOS.

Configurar a autenticação

Para configurar a autenticação, dentro da função startCallComposite, inicialize uma instância CommunicationTokenCredential. Substitua <USER_ACCESS_TOKEN> pelo valor do token de acesso.

let communicationTokenCredential = try! CommunicationTokenCredential(token: "<USER_ACCESS_TOKEN>")

Se você ainda não tiver um token de acesso, crie um token de acesso dos Serviços de Comunicação do Azure.

Criar CallComposite

Para criar CallComposite, dentro da função startCallComposite, inicialize uma instância CallCompositeOptions com <DISPLAY_NAME> opcional e uma instância CommunicationTokenCredential:

@objc private func startCallComposite() {
    let callCompositeOptions = CallCompositeOptions(displayName: "<DISPLAY_NAME>")
    let communicationTokenCredential = try! CommunicationTokenCredential(token: "<USER_ACCESS_TOKEN>")

    callComposite = CallComposite(credential: communicationTokenCredential, withOptions: callCompositeOptions)
}

Configurar uma chamada em grupo

Para configurar uma chamada de grupo, dentro da função startCallComposite, inicialize um localizador .groupCall. Substitua <GROUP_CALL_ID> pela ID do grupo da chamada.

// let uuid = UUID() to create a new call
let uuid = UUID(uuidString: "<GROUP_CALL_ID>")!
let locator = .groupCall(groupId: uuid)

Para obter mais informações sobre como usar uma ID de grupo para chamadas, consulte Gerenciar chamadas.

Ingressar em uma reunião do Teams

Você pode ingressar em uma reunião do Teams usando dois mecanismos:

  • URL da reunião do Teams ou URL curto da reunião do Teams
  • ID e senha da reunião do Teams

O link da reunião do Teams pode ser recuperado usando as APIs do Graph, que estão detalhadas na documentação do Graph.

O SDK de Chamada de Serviços de Comunicação aceita um link de reunião completo do Teams. Esse link é retornado como parte do recurso onlineMeeting, acessível na propriedade joinWebUrl Você também pode obter as informações da reunião necessárias da URL Ingressar na Reunião no próprio convite da reunião do Teams.

Participe por meio do URL da reunião do Teams

Para ingressar em uma reunião do Microsoft Teams, dentro da função startCallComposite, inicialize uma instância para o localizador .teamsMeeting. Substitua <TEAMS_MEETING_LINK> pelo link da reunião do Teams para sua chamada. Substitua <DISPLAY_NAME> pelo seu nome.

let locator = .teamsMeeting(teamsLink: "<TEAMS_MEETING_LINK>")

Participe por meio do ID e senha da reunião do Teams

O teamMeetingId localiza uma reunião usando uma ID e senha de reunião. Isso pode ser encontrado nas informações de ingresso de uma reunião do Teams. Um ID de reunião do Teams tem 12 caracteres e consiste em dígitos numéricos agrupados em três (ou seja 000 000 000 000). Uma senha consiste em 6 caracteres alfabéticos (ou seja aBcDeF). A senha diferencia maiúsculas de minúsculas.

let locator = .teamsMeetingId(meetingId: "<TEAMS_MEETING_ID>", meetingPasscode:  "<TEAMS_MEETING_PASSCODE>" )

Configurar uma chamada de sala

Para configurar uma chamada de Salas dos Serviços de Comunicação do Azure, inicialize um CallCompositeRoomLocator com uma ID de sala. Enquanto estiver na tela de configuração, CallComposite habilitará a câmera e o microfone para todos os participantes com qualquer função na sala. A função e os recursos atualizados dos participantes são recuperados dos Serviços de Comunicação do Azure assim que a chamada é conectada.

Para obter mais informações sobre as Salas, como criar e gerenciar uma, confira Início Rápido das Salas

let locator = .roomCall(roomId: "<ROOM_ID>")

Configurar uma chamada de saída 1:N e notificações por push de chamada de entrada

A Biblioteca da Interface do Usuário dá suporte à chamada VoIP individual para discar usuários pelo identificador de comunicação. Para receber a Biblioteca da Interface do Usuário de chamada recebida, também dá suporte ao registro para notificações por push. Para saber mais sobre a integração para a plataforma Android e iOS e o uso da API, confira Como fazer uma chamada um-para-um e receber notificações por PUSH.

Iniciar a composição

Dentro da função startCallComposite, chame launch na instância CallComposite:

callComposite?.launch(locator: locator)

Assinar eventos

Você pode implementar os fechamentos para agir sobre eventos compostos. Os seguintes errorCodes podem ser enviados ao manipulador de erro:

  • callJoin
  • callEnd
  • cameraFailure
  • tokenExpired
  • microphonePermissionNotGranted
  • networkConnectionNotAvailable

O exemplo a seguir mostra um evento de erro de uma composição com falha:

callComposite?.events.onError = { error in
    print("CallComposite failed with error:\(error)")
}

Aplicar opções de tema

Para personalizar a experiência de comunicação em seu aplicativo, crie opções de tema personalizadas que implementem o protocolo ThemeOptions. Inclua uma instância da nova classe em CallCompositeOptions:

class CustomThemeOptions: ThemeOptions {
   var primaryColor: UIColor {
       return UIColor.red
   }
}
let callCompositeOptions = CallCompositeOptions(theme: CustomThemeOptions())

Para obter mais informações sobre como o tema funciona, consulte o guia de temas.

Aplicar opções de localização

Para alterar o idioma na composição, crie opções de tradução personalizadas e inclua-as em CallCompositeOptions. Por padrão, todos os rótulos de texto usam cadeias de caracteres em inglês ( SupportedLocale.en ). Você pode usar LocalizationOptions para definir um valor diferente para locale. Por padrão, a Biblioteca de IU inclui um conjunto de valores de locale que você pode usar com componentes da interface do usuário. SupportedLocale.values fornece uma lista de todos os idiomas com suporte.

No exemplo a seguir, a composição é traduzida para o francês (fr):

// Option1: Use IntelliSense to get locales UI Library supports.
let localizationOptions = LocalizationOptions(locale: SupportedLocale.frFR)

// Option2: If UI Library doesn't support the locale you set, the Swift Locale struct defaults to English.
let localizationOptions = LocalizationOptions(locale: Locale(identifier: "fr-FR"))

let callCompositeOptions = CallCompositeOptions(localization: localizationOptions) 

Para obter mais informações sobre tradução e uma lista de idiomas com suporte, consulte o guia de tradução.

Assinar o evento de alteração do estado de chamada CallComposite

Você pode implementar os fechamentos para agir sobre eventos compostos. Os estados de chamada são enviados para o manipulador alterado de estado de chamada.

O exemplo a seguir mostra um evento para um estado de chamada alterado.

callComposite?.events.onCallStateChanged = { callStateEvent in
   print("CallComposite call state changed:\(callStateEvent.requestString)")
}

Ignorar CallComposite e assinar o evento ignorado

Para ignorar CallComposite, chame dismiss. O seguinte evento de ignorar será enviado na chamada composta ignorada:

callComposite?.events.onDismissed = { dismissed in
   print("CallComposite dismissed:\(dismissed.errorCode)")
}

callComposite.dismiss()

Mais recursos

A lista de casos de uso tem informações detalhadas sobre mais recursos.

Adicionar notificações ao aplicativo móvel

Os Serviços de Comunicação do Azure se integram à Grade de Eventos do Azure e aos Hubs de Notificação do Azure, que permitem adicionar notificações por push aos aplicativos no Azure. Você pode usar as notificações por push para enviar informações do aplicativo aos dispositivos móveis dos usuários. Você pode usar notificações por push para mostrar uma caixa de diálogo, tocar um som ou exibir a interface do usuário de chamada de entrada.

Limpar os recursos

Se quiser limpar e remover uma assinatura dos Serviços de Comunicação, exclua o recurso ou o grupo de recursos.

Excluir o grupo de recursos também exclui todos os recursos associados a ele.

Saiba mais sobre como limpar recursos.