Guia de início rápido: introdução à biblioteca da interface do usuário

Introdução à Biblioteca de Interface do Usuário dos Serviços de Comunicação do Azure para integrar rapidamente experiências de comunicação em seus aplicativos. Neste guia de início rápido, saiba como integrar compósitos da Biblioteca da Interface do Usuário em um aplicativo e configurar a experiência para os usuários do aplicativo.

A Biblioteca da Interface do Usuário dos Serviços de Comunicação renderiza uma experiência de comunicação completa diretamente em seu aplicativo. Ele cuida da conexão com a chamada e configura a participação do usuário na chamada nos bastidores. Como desenvolvedor, você precisa se preocupar com onde na experiência do usuário do seu aplicativo você deseja que a experiência de comunicação seja iniciada. O composto leva o usuário através da configuração de seus dispositivos, ingressando na chamada e participando dela, e renderizando outros participantes.

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

Nota

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 da Web.

Pré-requisitos

Você pode acessar os seguintes inícios rápidos:

Obtenha o aplicativo Android de exemplo para este início rápido na Biblioteca de Interface do Usuário dos Serviços de Comunicação do Azure de código aberto para Android.

Pré-requisitos

Configurar o projeto

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

Criar um novo projeto Android

No Android Studio, crie um novo projeto:

  1. No menu Arquivo, selecione Novo>Novo Projeto.

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

    Screenshot that shows the New Project dialog in Android Studio with Empty Activity selected.

  3. Selecione Seguinte.

  4. Em Atividade vazia, nomeie o projeto UILibraryQuickStart. Para idioma, selecione Java/Kotlin. Para o SDK mínimo, selecione API 21: Android 5.0 (Lollipop) ou posterior.

  5. Selecione Concluir.

    Screenshot that shows new project options and the Finish button selected.

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. Em seus scripts Gradle de projeto, certifique-se de que os seguintes repositórios sejam adicionados. Para Android Studio (2020.*), repositories está em , em dependencyResolutionManagement(Gradle version 6.8 or greater)settings.gradle. Para versões anteriores do Android Studio (4.*), repositories está no nível build.gradledo projeto, em allprojects{}.

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

Adicionar um botão ao 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 para iniciar o composto:

<?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 o composto

Para inicializar o composto:

  1. Aceder a MainActivity.

  2. Adicione o seguinte código para inicializar seus componentes compostos para chamada. Substitua "GROUP_CALL_ID" pelo ID de grupo da sua 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 com.azure.android.communication.ui.calling.models.CallCompositeRemoteOptions
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 remoteOptions = CallCompositeRemoteOptions(locator, communicationTokenCredential, "DISPLAY_NAME")

        val callComposite: CallComposite = CallCompositeBuilder().build()
        callComposite.launch(this, remoteOptions)
    }

    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 permissões e selecione as configurações de dispositivo, microfone e vídeo.
  3. Selecione Aderir à chamada.

GIF animation that shows an example of how the project runs on an Android device.

Modelo de objeto

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

Name Description
CallComposite Componente composto que renderiza uma experiência de chamada com galeria de participantes e controles
CallCompositeBuilder Construtor que cria CallComposite com opções
CallCompositeJoinMeetingLocator Lançamento aprovado CallComposite para iniciar uma chamada em grupo
CallCompositeTeamsMeetingLinkLocator Aprovado para iniciar para CallComposite participar de uma reunião do Microsoft Teams
CallCompositeLocalizationOptions Injetado como opcional para CallCompositeBuilder definir o idioma do composto

Funcionalidade da biblioteca da interface do usuário

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

Criar CallComposite

Para criar CallComposite, dentro da startCallComposite função, inicialize uma instância e uma CallCompositeBuilderCallComposite instância.

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

Configurar a autenticação

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

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

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

val communicationTokenCredential = CommunicationTokenCredential(communicationTokenRefreshOptions)

Configurar uma chamada de grupo

Para configurar uma chamada de grupo, inicialize uma CallCompositeGroupCallLocator e forneça-a CallCompositeRemoteOptions ao objeto.

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

val remoteOptions = CallCompositeRemoteOptions(
    locator,
    communicationTokenCredential,            
    "DISPLAY_NAME",
)

Configurar uma reunião do Teams

Para configurar uma reunião do Microsoft Teams, inicialize uma CallCompositeTeamsMeetingLinkLocator e forneça-a CallCompositeRemoteOptions ao objeto.

val locator = CallCompositeTeamsMeetingLinkLocator("TEAMS_MEETING_LINK")

val remoteOptions = CallCompositeRemoteOptions(
    locator,
    communicationTokenCredential,            
    "DISPLAY_NAME",
)

Configurar uma chamada de Quartos

Importante

Este recurso dos Serviços de Comunicação do Azure está atualmente em visualização.

As APIs e SDKs de visualização são fornecidos sem um contrato de nível de serviço. Recomendamos que você não os use para cargas de trabalho de produção. Alguns recursos podem não ser suportados ou podem ter recursos restritos.

Para obter mais informações, consulte Termos de Utilização Suplementares para Pré-visualizações do Microsoft Azure.

Para configurar uma chamada de Salas dos Serviços de Comunicação do Azure, inicialize um CallCompositeRoomLocator, forneça-o CallCompositeRemoteOptions ao objeto e defina CallCompositeParticipantRole como o CallCompositeLocalOptions por setRoleHint(). CallComposite usará a dica de função antes de se conectar à chamada. Depois que a chamada é conectada, a função de participante atualizada real é recuperada dos Serviços de Comunicação do Azure.

Para obter mais informações sobre Salas, como criar e gerenciar uma, consulte Guia de início rápido de salas

val locator = CallCompositeRoomLocator("<ROOM_ID>")

val remoteOptions = CallCompositeRemoteOptions(
    locator,
    communicationTokenCredential,            
    "DISPLAY_NAME",
)

val localOptions = CallCompositeLocalOptions().setRoleHint(participantRole)

val callComposite = CallCompositeBuilder().build()
callComposite.launch(context, remoteOptions, localOptions)

Inicie o composto

Para iniciar a interface do usuário de chamada, dentro da startCallComposite função, chame launch a CallComposite instância.

callComposite.launch(context, remoteOptions)

Inscrever-se em eventos de erro CallComposite

Para receber eventos de erro, ligue setOnErrorHandler para CallComposite.

Os seguintes errorCode valores podem ser enviados para o manipulador de erros:

  • 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 para um evento composto com falha.

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

Aplicar uma configuração de tema

Para alterar a cor primária do composto, crie um novo estilo de tema em src/main/res/values/themes.xml e src/main/res/values-night/themes.xml usando AzureCommunicationUICalling.Theme como tema pai. Para aplicar o tema, injete o 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 uma configuração de localização

Para alterar o idioma do composto, use CallCompositeSupportedLocale para criar CallCompositeLocalizationOptions com Locale. Para aplicar o idioma, injete a configuração de localização no 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 da Interface do Usuário inclui um conjunto de valores que você pode usar com os componentes da language interface do usuário. CallCompositeSupportedLocale fornece as localidades suportadas. Por exemplo, para acessar a localidade em inglês, você pode usar CallCompositeSupportedLocale.EN. CallCompositeSupportedLocale.getSupportedLocales() Fornece uma lista de objetos de localidade para idiomas suportados.

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()

Inscrever-se no evento alterado de estado de chamada CallComposite

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

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

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

Dispense o CallComposite e inscreva-se no evento descartado

Para receber a demissão, ligue addOnDismissedEventHandler para CallComposite. Para descartar o CallComposite, ligue dismisspara .

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

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

callComposite.dismiss()

Mais funcionalidades

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

Adicionar notificações à sua aplicação móvel

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

Obtenha o aplicativo iOS de exemplo para este início rápido na Biblioteca de Interface do Usuário dos Serviços de Comunicação do Azure de código aberto para iOS.

Pré-requisitos

Configurar o projeto

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

Criar um novo projeto Xcode

No Xcode, crie um novo projeto:

  1. No menu Arquivo, selecione Novo>projeto.

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

    Screenshot that shows the Xcode new project dialog, with iOS and the App template selected.

  3. Em Escolher opções para seu novo projeto, para o nome do produto, digite UILibraryQuickStart. Para a interface, selecione Storyboard.

    Screenshot that shows setting new project options in Xcode.

Instalar o pacote e as dependências

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

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

  3. Adicione o seguinte código ao seu Podfile. Substitua UILibraryQuickStart pelo nome do 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 .xcworkspace gerado.

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 aplicativo. 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.

  1. Clique com o botão direito do mouse na entrada da árvore do Info.plist projeto e selecione Abrir como>código-fonte. Adicione as seguintes linhas à secção de nível <dict> superior e, em seguida, guarde o ficheiro.

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

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

    Screenshot that shows an example of the info plist source code in an Xcode file.

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

    Screenshot that shows the camera and microphone device privacy in Xcode.

Desativar Bitcode

No projeto Xcode, em Configurações de compilação, defina a opção Ativar código de bits como Não. Para encontrar a configuração, altere o filtro de Básico para Todos ou use a barra de pesquisa.

Screenshot that shows the Build Settings option to turn off Bitcode.

Inicializar o composto

Para inicializar o composto:

  1. Aceder a ViewController.

  2. Adicione o seguinte código para inicializar seus componentes compostos para uma chamada. Substitua <GROUP_CALL_ID> pelo ID de grupo da sua chamada ou por UUID() para gerar um ID de grupo para a chamada. Substitua <DISPLAY_NAME> pelo seu nome. (O limite de comprimento da cadeia de caracteres é de <DISPLAY_NAME> 256 caracteres.) Substitua <USER_ACCESS_TOKEN> pelo seu 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()
    
            callComposite = CallComposite(withOptions: callCompositeOptions)
    
            let communicationTokenCredential = try! CommunicationTokenCredential(token: "<USER_ACCESS_TOKEN>")
    
            let remoteOptions = RemoteOptions(for: .groupCall(groupId: UUID(uuidString: "<GROUP_CALL_ID>")!),
                                              credential: communicationTokenCredential,
                                              displayName: "<DISPLAY_NAME>")
            callComposite?.launch(remoteOptions: remoteOptions)
        }
    }
    

Executar o código

Para criar e executar seu aplicativo no simulador do iOS, selecione Executar produto>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 configurações de dispositivo, microfone e vídeo.

  3. Selecione Iniciar chamada.

GIF animation that demonstrates the final look and feel of the quickstart iOS app.

Modelo de objeto

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

Name Description
CallComposite Componente que renderiza uma experiência de chamada que tem uma galeria de participantes e controles
CallCompositeOptions Configurações para opções como temas e manipulação de eventos
Opções remotas Opções remotas para enviar aos Serviços de Comunicação do Azure para participar numa chamada de grupo ou numa reunião do Teams.
ThemeOptions Opções de personalização para o tema composto
LocalizaçãoOpções Opções de idioma para o composto

Funcionalidade da biblioteca da interface do usuário

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

Criar CallComposite

Para criar CallComposite, dentro da startCallComposite função, inicialize uma instância e uma CallCompositeOptionsCallComposite instância:

@objc private func startCallComposite() {
    let callCompositeOptions = CallCompositeOptions()

    callComposite = CallComposite(withOptions: callCompositeOptions)
}

Configurar a autenticação

Para configurar a autenticação, dentro da startCallComposite função, inicialize uma CommunicationTokenCredential instância. Substitua <USER_ACCESS_TOKEN> pelo seu 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.

Configurar uma chamada de grupo

Para configurar uma chamada de grupo, dentro da startCallComposite função, inicialize uma RemoteOptions instância para o .groupCall localizador. Substitua <GROUP_CALL_ID> pelo ID de grupo da sua chamada. Substitua <DISPLAY_NAME> pelo seu nome.

// let uuid = UUID() to create a new call
let uuid = UUID(uuidString: "<GROUP_CALL_ID>")!
let remoteOptions = RemoteOptions(for: .groupCall(groupId: uuid),
                                  credential: communicationTokenCredential,
                                  displayName: "<DISPLAY_NAME>")

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

Configurar uma reunião do Teams

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

let remoteOptions = RemoteOptions(for: .teamsMeeting(teamsLink: "<TEAMS_MEETING_LINK>"),
                                  credential: communicationTokenCredential,
                                  displayName: "<DISPLAY_NAME>")

Você pode obter um link de reunião do Microsoft Teams usando as APIs do Graph. Este processo é detalhado na documentação do Graph.

O SDK de Chamada dos Serviços de Comunicação aceita um link de reunião completo do Microsoft Teams. Este link é retornado como parte do onlineMeeting recurso, sob a propriedade joinWebUrl. Você também pode obter as informações necessárias da reunião a partir do URL de Ingresso na Reunião no próprio convite para reunião do Teams.

Configurar uma chamada de Quartos

Importante

Este recurso dos Serviços de Comunicação do Azure está atualmente em visualização.

As APIs e SDKs de visualização são fornecidos sem um contrato de nível de serviço. Recomendamos que você não os use para cargas de trabalho de produção. Alguns recursos podem não ser suportados ou podem ter recursos restritos.

Para obter mais informações, consulte Termos de Utilização Suplementares para Pré-visualizações do Microsoft Azure.

Para configurar uma chamada de Salas de Serviços de Comunicação do Azure, dentro da startCallComposite função, inicialize uma RemoteOptions instância para o .roomCall localizador. Substitua <ROOM_ID> pelo ID da sala da sua chamada. Inicialize uma LocalOptions instância com roleHint.

Substitua <DISPLAY_NAME> pelo seu nome.

CallComposite usará a dica de função antes de se conectar à chamada. Depois que a chamada é conectada, a função de participante atualizada real é recuperada dos Serviços de Comunicação do Azure.

Para obter mais informações sobre Salas, como criar e gerenciar uma, consulte Guia de início rápido de salas

let remoteOptions = RemoteOptions(for: .roomCall(roomId: "<ROOM_ID>"),
                                  credential: communicationTokenCredential,
                                  displayName: "<DISPLAY_NAME>")
let localOptions = LocalOptions(roleHint: participantRole)

let callComposite = CallComposite()
callComposite.launch(remoteOptions: remoteOptions, localOptions: localOptions)

Inicie o composto

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

callComposite?.launch(remoteOptions: remoteOptions)

Subscrever os eventos

Você pode implementar fechamentos para agir em eventos compostos. Os seguintes errorCodes podem ser enviados para o manipulador de erros:

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

O exemplo a seguir mostra um evento de erro para um evento composto 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 ThemeOptions protocolo. 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 os temas funcionam, consulte o guia de temas.

Aplicar opções de localização

Para alterar o idioma no composto, crie opções de localização personalizadas e inclua-as no 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 da Interface do Usuário inclui um conjunto de valores que você pode usar com os componentes da locale interface do usuário. SupportedLocale.values Fornece uma lista de todos os idiomas suportados.

No exemplo a seguir, o composto está localizado para 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 localização e para obter uma lista de idiomas suportados, consulte o guia de localização.

Inscrever-se no evento alterado de estado de chamada CallComposite

Você pode implementar fechamentos para agir em eventos compostos. Os estados de chamada serã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)")
}

Dispense o CallComposite e inscreva-se no evento descartado

Para descartar o CallComposite, ligue dismisspara . O seguinte evento de dispensa ser enviado em chamada composto rejeitado:

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

callComposite.dismiss()

Adicionar notificações à sua aplicação móvel

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

Clean up resources (Limpar recursos)

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

A exclusão do grupo de recursos também exclui quaisquer outros recursos associados a ele.

Saiba mais sobre a limpeza de recursos.