Inicio rápido: Introducción a la biblioteca de la interfaz de usuario

Comience a usar la biblioteca de la interfaz de usuario de Azure Communication Services para integrar rápidamente las experiencias de comunicación en sus aplicaciones. En este inicio rápido, aprenderá a integrar compuestos de biblioteca de interfaz de usuario en una aplicación y a configurar la experiencia de los usuarios de la aplicación.

La biblioteca de interfaz de usuario de Communication Services representa una experiencia de comunicación completa directamente en la aplicación. Se encarga de conectarse a la llamada y configura la participación del usuario en la llamada en segundo plano. Como desarrollador, tiene que preocuparse de dónde quiere, en la experiencia del usuario, que se inicie la experiencia de comunicación. La composición acompaña al usuario a lo largo de la configuración de sus dispositivos, de la incorporación a la llamada y de la participación en ella, así como de la representación de otros participantes.

Visualice este vídeo para obtener información general:

Nota

Puede encontrar documentación detallada e inicios rápidos sobre la biblioteca de interfaz de usuario web en el libro de historias sobre la Biblioteca de interfaz de usuario.

Requisitos previos

Puede acceder a los siguientes inicios rápidos:

Obtenga la aplicación Android de ejemplo para este inicio rápido en la biblioteca de interfaz de usuario de código abierto de Azure Communication Services para Android.

Requisitos previos

Configuración del proyecto

Complete las secciones siguientes para configurar el proyecto de inicio rápido.

Creación de un nuevo proyecto de Android

En Android Studio, cree un proyecto nuevo:

  1. En el menú Archivo, seleccione Nuevo>Nuevo proyecto.

  2. En Nuevo proyecto, seleccione la plantilla de proyecto Actividad vacía.

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

  3. Seleccione Siguiente.

  4. En Actividad vacía, asigne al proyecto el nombre UILibraryQuickStart. En lenguaje, seleccione Java/Kotlin. Para el SDK mínimo, seleccione API 21: Android 5.0 (Lollipop) o posterior.

  5. Seleccione Finalizar.

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

Instalación de los paquetes

Complete las secciones siguientes para instalar los paquetes de aplicación necesarios.

Adición de una dependencia

En el archivo UILibraryQuickStart/app/build.gradle de nivel de aplicación (en la carpeta de la aplicación), agregue la dependencia siguiente:

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

Agregar repositorios de Maven

Se requieren dos repositorios Maven para integrar la biblioteca:

  • MavenCentral
  • El repositorio de paquetes de Azure

Para agregar los repositorios:

  1. En los scripts de Gradle del proyecto, asegúrese de agregar los siguientes repositorios. Para Android Studio (2020.*), repositories está en settings.gradle, que a su vez está en dependencyResolutionManagement(Gradle version 6.8 or greater). Para versiones anteriores de Android Studio (4.*), repositories está en el nivel de proyecto build.gradle, en allprojects{}.

    // dependencyResolutionManagement
    repositories {
        ...
        mavenCentral()
        maven {
            url "https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1"
        }
        ...
    }
    
  2. Sincronice el proyecto con los archivos de Gradle. Para sincronizar el proyecto, en el menú Archivo, seleccione Sincronizar proyecto con archivos Gradle.

Agregar un botón a Activity_main.xml

En el archivo de diseño app/src/main/res/layout/activity_main.xml, agregue el código siguiente para crear un botón para iniciar el compuesto:

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

Inicialización del compuesto

Para inicializar el compuesto:

  1. Ir a MainActivity.

  2. Agregue el siguiente código para inicializar los componentes compuestos de llamada. Reemplace "GROUP_CALL_ID" por el id. de grupo de la llamada. Reemplace "DISPLAY_NAME" por su propio nombre. Reemplace "USER_ACCESS_TOKEN" por su 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"
    }
}

Ejecución del código

En Android Studio, compile e inicie la aplicación:

  1. Seleccione Iniciar.
  2. Acepte los permisos y seleccione la configuración de dispositivo, micrófono y vídeo.
  3. Seleccione Unirse a la llamada.

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

Modelo de objetos

Las siguientes clases e interfaces controlan algunas características principales del SDK de la interfaz de usuario de Android para Azure Communication Services:

Nombre Descripción
CallComposite Componente compuesto que representa una experiencia de llamada con galería de participantes y controles
CallCompositeBuilder Generador que compila CallComposite con opciones
CallCompositeJoinMeetingLocator Se ha pasado al inicio de CallComposite para iniciar una llamada de grupo
CallCompositeTeamsMeetingLinkLocator Se ha pasado al inicio de CallComposite para unirse a una reunión en Teams
CallCompositeLocalizationOptions Se ha insertado como opcional en CallCompositeBuilder para el lenguaje del compuesto

Funcionalidad de la biblioteca de interfaz de usuario

Obtenga el código para crear características de comunicación clave para la aplicación Android.

Creación de CallComposite

Para crear CallComposite, dentro de la función startCallComposite, inicialice una instancia CallCompositeBuilder y una instancia CallComposite.

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

Configuración de la autenticación

Para configurar la autenticación, dentro de la función startCallComposite, inicialice una instancia CommunicationTokenCredential. Reemplace "USER_ACCESS_TOKEN" con el token de acceso.

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

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

val communicationTokenCredential = CommunicationTokenCredential(communicationTokenRefreshOptions)

Configuración de una llamada de grupo

Para configurar una llamada de grupo, inicialice un CallCompositeGroupCallLocator y proporciónelo al objeto CallCompositeRemoteOptions.

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

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

Configuración de una reunión de Teams

Para configurar una reunión de Microsoft Teams, inicialice un CallCompositeTeamsMeetingLinkLocator y proporciónelo al objeto CallCompositeRemoteOptions.

val locator = CallCompositeTeamsMeetingLinkLocator("TEAMS_MEETING_LINK")

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

Configurar una llamada de Salas

Importante

Esta característica de Azure Communication Services se encuentra actualmente en versión preliminar.

Las API y los SDK en versión preliminar se proporcionan sin contrato de nivel de servicio. Se recomienda no usarlos para las cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que sus funcionalidades estén limitadas.

Para obtener más información, consulte Términos de uso complementarios para las Versiones preliminares de Microsoft Azure.

Para configurar una llamada de Salas de Azure Communication Services, inicialice un CallCompositeRoomLocator, proporciónelo al objeto CallCompositeRemoteOptions y establezca CallCompositeParticipantRole en CallCompositeLocalOptions mediante setRoleHint(). CallComposite usará la sugerencia de rol antes de conectarse a la llamada. Una vez conectada la llamada, el rol de participante actualizado real se recupera de Azure Communication Services.

Para obtener más información sobre Salas y sobre cómo crear y administrar una, consulte Inicio 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)

Inicio del compuesto

Para iniciar la interfaz de usuario de llamada, dentro de la función startCallComposite, llame a launch en la instancia de CallComposite.

callComposite.launch(context, remoteOptions)

Suscripción a eventos de error de CallComposite

Para recibir eventos de error, llame a setOnErrorHandler con CallComposite.

Los valores siguientes errorCode se pueden enviar al controlador de errores:

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

En el ejemplo siguiente se muestra un evento de error para un evento compuesto fallido.

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

Aplicación de la configuración de tema

Para cambiar el color principal del compuesto, cree un nuevo estilo de tema en src/main/res/values/themes.xml y src/main/res/values-night/themes.xml usando AzureCommunicationUICalling.Theme como tema principal. Para aplicar el tema, inserte el identificador de tema en 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()

Aplicación de la configuración de localización

Para cambiar el lenguaje del compuesto, utilice CallCompositeSupportedLocale para crear CallCompositeLocalizationOptions con Locale. Para aplicar el idioma, inserte la configuración de localización en CallCompositeBuilder. De forma predeterminada, todas las etiquetas de texto usan cadenas en inglés (en). Puede usar CallCompositeLocalizationOptions para establecer un valor diferente para language. De forma predeterminada, la biblioteca de interfaz de usuario incluye un conjunto de valores language que puede usar con componentes de la interfaz de usuario. CallCompositeSupportedLocale proporciona las configuraciones regionales admitidas. Por ejemplo, para acceder a la configuración regional en inglés, puede usar CallCompositeSupportedLocale.EN. CallCompositeSupportedLocale.getSupportedLocales() proporciona una lista de objetos de configuración regional para los lenguajes admitidos.

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

Suscribirse al evento de cambio de estado de llamada de CallComposite

Para recibir eventos de cambio de estado de llamada, llame a addOnCallStateChangedEventHandler con CallComposite.

En el ejemplo siguiente se muestra un evento de un estado de llamada cambiado.

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

Descartar CallComposite y suscribirse al evento descartado

Para recibir el descarte, llame a addOnDismissedEventHandler con CallComposite. Para descartar CallComposite, llame a dismiss.

En el ejemplo siguiente se muestra un evento de un estado de llamada cambiado.

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

callComposite.dismiss()

Más características

La lista de casos de uso tiene información detallada de más características.

Adición de notificaciones a la aplicación móvil

Azure Communication Services ofrece integraciones con Azure Event Grid y Azure Notification Hubs que permiten agregar notificaciones de inserción a las aplicaciones de Azure. Las notificaciones de inserción permiten enviar información de la aplicación a los dispositivos móviles de los usuarios. Puede usar las notificaciones de inserción para mostrar un cuadro de diálogo, reproducir un sonido o mostrar la interfaz de usuario de llamadas entrantes.

Obtenga la aplicación iOS de ejemplo para este inicio rápido en la biblioteca de interfaz de usuario de código abierto de Azure Communication Services para iOS.

Requisitos previos

Configuración del proyecto

Complete las secciones siguientes para configurar el proyecto de inicio rápido.

Creación de un nuevo proyecto de Xcode

En Xcode, cree un nuevo proyecto:

  1. En el menú Archivo, seleccione Nuevo>Proyecto.

  2. En Elegir una plantilla para el nuevo proyecto, seleccione la plataforma iOS y seleccione la plantilla de aplicación App. En el inicio rápido se usan guiones gráficos de UIKit. El inicio rápido no crea pruebas, por lo que puede desactivar la casilla Incluir pruebas.

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

  3. En Elegir opciones para el nuevo proyecto, escriba en el nombre del producto UILibraryQuickStart. Para la interfaz, seleccione Storyboard.

    Screenshot that shows setting new project options in Xcode.

Instale el paquete y sus dependencias

  1. (Opcional) Para MacBook con M1, instale y habilite Rosetta en Xcode.

  2. Cree un Podfile en el directorio raíz del proyecto mediante la ejecución de pod init. Actualice CocoaPods a la versión actual en caso de que se produzca un error.

  3. Agregue el código siguiente a su Podfile. Reemplace UILibraryQuickStart por el nombre del proyecto.

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

  5. En Xcode, abra el archivo .xcworkspace generado.

Solicite acceso al hardware del dispositivo

Para acceder al hardware del dispositivo, incluyendo micrófono y cámara, debe actualizar la lista de propiedades de información de la aplicación. Establezca el valor asociado a una cadena que se incluye en el cuadro de diálogo empleado por el sistema para solicitar acceso al usuario.

  1. Haga clic con el botón derecho en la entrada Info.plist del árbol del proyecto y seleccione Abrir como>Código fuente. Agregue las líneas siguientes a la sección <dict> de nivel superior, y luego guarde el archivo.

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

    Este es un ejemplo del Info.plist código fuente en un archivo Xcode:

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

  2. Para comprobar que las solicitudes de permisos de dispositivo se agregan correctamente, seleccione Abrir como>Lista de Propiedades. Compruebe que la lista de propiedades de información es similar al ejemplo siguiente:

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

Desactivación de Bitcode

En el proyecto Xcode, en Configuración de compilación, establezca la opción Habilitar bitcode en No. Para encontrar la configuración, cambie el filtro de Básico a Todo o use la barra de búsqueda.

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

Inicialización del compuesto

Para inicializar el compuesto:

  1. Ir a ViewController.

  2. Para inicializar sus componentes compuestos de llamada agregue el siguiente código. Reemplace <GROUP_CALL_ID> o bien por el identificador de grupo de la llamada o bien por UUID() para generar un identificador de grupo para la llamada. Reemplace <DISPLAY_NAME> por su propio nombre. (El límite de longitud de cadena para <DISPLAY_NAME> es de 256 caracteres). Reemplace <USER_ACCESS_TOKEN> por su token de acceso.

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

Ejecución del código

Para compilar y ejecutar la aplicación en el simulador de iOS, seleccione Producto>Ejecutar o use el método abreviado de teclado (⌘-R). Pruebe ahora la experiencia de llamada en el simulador:

  1. Seleccione Iniciar Experiencia.

  2. Acepte los permisos de audio y seleccione la configuración de dispositivo, micrófono y vídeo.

  3. Seleccione Iniciar llamada.

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

Modelo de objetos

Las siguientes clases e interfaces controlan algunas de las características principales de la biblioteca cliente de la interfaz de usuario de Azure Communication Services:

Nombre Descripción
CallComposite Componente compuesto que representa una experiencia de llamada que contiene una galería de participantes y controles
CallCompositeOptions Configuración de opciones, como temas y control de eventos
RemoteOptions Opciones remotas para enviar a Azure Communication Services para unirse a una llamada de grupo o a una reunión de Teams.
ThemeOptions Opciones de personalización del tema del compuesto
LocalizationOptions Opciones de idioma para el compuesto

Funcionalidad de la biblioteca de interfaz de usuario

Obtenga el código para crear características clave de comunicación para la aplicación iOS.

Creación de CallComposite

Para crear CallComposite, dentro de la función startCallComposite, inicialice una instancia CallCompositeOptions y una instancia CallComposite:

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

    callComposite = CallComposite(withOptions: callCompositeOptions)
}

Configuración de la autenticación

Para configurar la autenticación, dentro de la función startCallComposite, inicialice una instancia CommunicationTokenCredential. Reemplace <USER_ACCESS_TOKEN> con el token de acceso.

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

Si aún no tiene un token de acceso, cree un token de acceso Azure Communication Services.

Configuración de una llamada de grupo

Para configurar una llamada de grupo, dentro de la función startCallComposite, inicialice una instancia RemoteOptions para el localizador .groupCall. Reemplace <GROUP_CALL_ID> por el id. de grupo de la llamada. Reemplace <DISPLAY_NAME> por su propio nombre.

// 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>")

Consulte Administrar llamadas para obtener información adicional sobre el uso de un identificador de grupo para las llamadas.

Configuración de una reunión de Teams

Para configurar una reunión de Microsoft Teams, dentro de la función startCallComposite, inicialice una instancia RemoteOptions para el localizador .teamsMeeting. Reemplace <TEAMS_MEETING_LINK> por el vínculo de reunión de Teams para la llamada. Reemplace <DISPLAY_NAME> por su propio nombre.

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

Puede obtener un vínculo de reunión de Microsoft Teams mediante Graph API. Este proceso se detalla en la documentación de Graph.

El SDK de llamadas de Communication Services acepta un vínculo completo a la reunión en Microsoft Teams. Este vínculo se devuelve como parte del recurso onlineMeeting, en la propiedad joinWebUrl. También puede obtener la información de la reunión necesaria en la dirección URL Unirse a la reunión de la propia invitación a la reunión en Teams.

Configurar una llamada de Salas

Importante

Esta característica de Azure Communication Services se encuentra actualmente en versión preliminar.

Las API y los SDK en versión preliminar se proporcionan sin contrato de nivel de servicio. Se recomienda no usarlos para las cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que sus funcionalidades estén limitadas.

Para obtener más información, consulte Términos de uso complementarios para las Versiones preliminares de Microsoft Azure.

Para configurar una llamada de Salas Azure Communication Services, dentro de la función startCallComposite, inicialice una instancia RemoteOptions para el localizador .roomCall. Reemplace <ROOM_ID> por el id. de la Sala de la llamada. Inicialice una instancia de LocalOptions con roleHint.

Reemplace <DISPLAY_NAME> por su propio nombre.

CallComposite usará la sugerencia de rol antes de conectarse a la llamada. Una vez conectada la llamada, el rol de participante actualizado real se recupera de Azure Communication Services.

Para obtener más información sobre Salas y sobre cómo crear y administrar una, consulte Inicio 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)

Inicio del compuesto

Dentro de la función startCallComposite, llame launch en la instancia CallComposite:

callComposite?.launch(remoteOptions: remoteOptions)

Suscripción a los eventos

Puede implementar cierres para que actúen sobre los eventos. Los errorCodes siguientes se pueden enviar al controlador de errores:

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

En el ejemplo siguiente se muestra un evento de error para un evento de composición fallida:

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

Aplicación de las opciones de tema

Para personalizar la experiencia de comunicación en la aplicación, cree opciones de tema personalizadas que implementen el protocolo ThemeOptions. Incluya una instancia de la nueva clase en CallCompositeOptions:

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

Para obtener más información sobre cómo funcionan las temáticas, consulte la guía de temáticas.

Aplicación de opciones de localización

Para cambiar el idioma de la composición, cree opciones de localización personalizadas e inclúyalas en CallCompositeOptions. De forma predeterminada, todas las etiquetas de texto usan cadenas en inglés (SupportedLocale.en). Puede usar LocalizationOptions para establecer un valor diferente para locale. La biblioteca de interfaz de usuario incluye de forma predeterminada un conjunto de valores locale que puede usar con componentes de la interfaz de usuario. SupportedLocale.values proporciona una lista de los idiomas admitidos.

En el ejemplo siguiente, la composición se traduce al 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 obtener más información sobre traducciones y para obtener una lista de los idiomas admitidos, consulte la guía de traducción.

Suscribirse al evento de cambio de estado de llamada de CallComposite

Puede implementar cierres para que actúen sobre los eventos. Los estados de llamada se enviarán al controlador del cambio de estado de llamada.

En el ejemplo siguiente se muestra un evento de un estado de llamada cambiado.

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

Descartar CallComposite y suscribirse al evento descartado

Para descartar CallComposite, llame a dismiss. El siguiente evento de descarte se envía al llamar al compuesto descartado:

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

callComposite.dismiss()

Adición de notificaciones a la aplicación móvil

Azure Communication Services ofrece integraciones con Azure Event Grid y Azure Notification Hubs que permiten agregar notificaciones de inserción a las aplicaciones de Azure. Las notificaciones de inserción permiten enviar información de la aplicación a los dispositivos móviles de los usuarios. Puede usar las notificaciones de inserción para mostrar un cuadro de diálogo, reproducir un sonido o mostrar la interfaz de usuario de llamadas entrantes.

Limpieza de recursos

Si quiere limpiar y quitar una suscripción a Communication Services, puede eliminar el recurso o grupo de recursos.

Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.

Obtenga más información sobre la limpieza de recursos.