Compartir vía


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.

    Captura de pantalla que muestra el diálogo Nuevo proyecto en Android Studio con la opción Actividad bacía seleccionada.

  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 26: Android 8.0 (Oreo) o posterior.

  5. Seleccione Finalizar.

    Captura de pantalla que muestra nuevas opciones de proyecto y el botón Finalizar seleccionado.

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

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.

Animación GIF que muestra un ejemplo de cómo se ejecuta el proyecto en un dispositivo Android.

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

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)

Creación de CallComposite

Para crear CallComposite, dentro de la función startCallComposite, inicialice una instancia CallCompositeBuilder con el contexto de la aplicación, las credenciales y un nombre para mostrar.

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

Configuración de una llamada de grupo

Para configurar una llamada de grupo, inicialice un CallCompositeGroupCallLocator.

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

Unirse a reunión de Teams

Puede unirse a una reunión de Teams mediante dos mecanismos:

  • Dirección URL o dirección URL corta de reunión de Teams
  • Id. de reunión y código de acceso de Teams

El vínculo de reunión de Teams se puede recuperar mediante las Graph API, que se detallan en la documentación de Graph.

El SDK de llamada de Communication Services acepta un vínculo a toda la reunión de Teams. Este vínculo se devuelve como parte del recurso onlineMeeting, al que se accede bajo la propiedad joinWebUrl. También puede obtener la información necesaria de la reunión de la dirección URL Unirse a la reunión de la propia invitación a la reunión de Teams.

Unirse a través de la dirección URL de reunión de Teams

Para unirse a una reunión de Microsoft Teams, inicialice un CallCompositeTeamsMeetingLinkLocator.

val locator = CallCompositeTeamsMeetingLinkLocator("TEAMS_MEETING_LINK")

Unirse a través del id. y el código de acceso de reunión de Teams

El CallCompositeTeamsMeetingLinkLocator busca una reunión mediante un id. de reunión y un código de acceso. Estos se pueden encontrar en la información de unión de una reunión de Teams. Un id. de reunión de Teams tiene 12 caracteres y consta de dígitos numéricos agrupados en tres (es decir, 000 000 000 000). Un código de acceso consta de 6caracteres alfabéticos (es decir, aBcDeF). El código de acceso distingue entre mayúsculas y minúsculas.

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

Configurar una llamada de Salas

Para configurar una llamada de Salas de Azure Communication Services, inicialice un CallCompositeRoomLocator con un id. de sala. En la pantalla de configuración, CallComposite habilita la cámara y el micrófono para todos los participantes con cualquier rol de sala. El rol y las funcionalidades reales y actualizados del participante se recuperan de Azure Communication Services una vez conectada la llamada.

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

Configuración de una llamada saliente 1:N y notificaciones de inserción de llamadas entrantes

La biblioteca de interfaz de usuario admite llamadas VoIP de uno a uno para llamar a los usuarios por su identificador de comunicación. Para recibir la biblioteca de interfaz de usuario de llamadas entrantes también admite el registro para las notificaciones PUSH. Para obtener más información sobre la integración para la plataforma Android e iOS y el uso de la API, consulte Cómo realizar una llamada de uno a uno y recibir notificaciones PUSH.

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(activityContext, locator)

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.

    Captura de pantalla que muestra el diálogo del nuevo proyecto Xcode, con iOS y la plantilla App seleccionados.

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

    Captura de pantalla que muestra el establecimiento de las opciones del nuevo proyecto en 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:

    Captura de pantalla que muestra un ejemplo del código fuente de la lista de información en un archivo Xcode.

  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:

    Captura de pantalla que muestra la privacidad de la cámara y el micrófono en 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.

Captura de pantalla que muestra la opción Configuración de compilación para deshabilitar 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(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>")!))
        }
    }
    

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 animado que demuestra el aspecto final y la sensación que produce la aplicación Inicio rápido iOS.

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

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.

Creación de CallComposite

Para crear CallComposite, dentro de la función startCallComposite, inicialice una instancia CallCompositeOptions con <DISPLAY_NAME> opcional y una instancia 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)
}

Configuración de una llamada de grupo

Para configurar una llamada de grupo, dentro de la función startCallComposite, inicialice un localizador .groupCall. Reemplace <GROUP_CALL_ID> por el id. de grupo de la llamada.

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

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

Unirse a reunión de Teams

Puede unirse a una reunión de Teams mediante dos mecanismos:

  • Dirección URL o dirección URL corta de reunión de Teams
  • Id. de reunión y código de acceso de Teams

El vínculo de reunión de Teams se puede recuperar mediante las Graph API, que se detallan en la documentación de Graph.

El SDK de llamada de Communication Services acepta un vínculo a toda la reunión de Teams. Este vínculo se devuelve como parte del recurso onlineMeeting, al que se accede bajo la propiedad joinWebUrl. También puede obtener la información necesaria de la reunión de la dirección URL Unirse a la reunión de la propia invitación a la reunión de Teams.

Unirse a través de la dirección URL de reunión de Teams

Para unirse a una reunión de Microsoft Teams, dentro de la función startCallComposite, inicialice una instancia 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 locator = .teamsMeeting(teamsLink: "<TEAMS_MEETING_LINK>")

Unirse a través del id. y el código de acceso de reunión de Teams

El teamMeetingId busca una reunión mediante un id. de reunión y un código de acceso. Estos se pueden encontrar en la información de unión de una reunión de Teams. Un id. de reunión de Teams tiene 12 caracteres y consta de dígitos numéricos agrupados en tres (es decir, 000 000 000 000). Un código de acceso consta de 6caracteres alfabéticos (es decir, aBcDeF). El código de acceso distingue entre mayúsculas y minúsculas.

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

Configuración de una llamada a Salas

Para configurar una llamada de Salas de Azure Communication Services, inicialice un CallCompositeRoomLocator con un id. de sala. En la pantalla de configuración, CallComposite habilitará la cámara y el micrófono para todos los participantes con cualquier rol de sala. El rol y las funcionalidades reales y actualizados del participante se recuperan de Azure Communication Services una vez conectada la llamada.

Para obtener más información sobre Salas y sobre cómo crear y administrar una, consulte Inicio rápido de Salas

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

Configuración de una llamada saliente 1:N y notificaciones de inserción de llamadas entrantes

La biblioteca de interfaz de usuario admite llamadas VoIP de uno a uno para llamar a los usuarios por su identificador de comunicación. Para recibir la biblioteca de interfaz de usuario de llamadas entrantes también admite el registro para las notificaciones PUSH. Para obtener más información sobre la integración para la plataforma Android e iOS y el uso de la API, consulte Cómo realizar una llamada de uno a uno y recibir notificaciones PUSH.

Inicio del compuesto

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

callComposite?.launch(locator: locator)

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 envían 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()

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.

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.