Compartir a través de


Configuración de notificaciones push y llamadas individuales en la biblioteca de interfaz de usuario

La biblioteca de interfaz de usuario proporciona compatibilidad inmediata para realizar llamadas individuales mediante los identificadores de participante de Azure Communication Services. Para admitir llamadas individuales, la biblioteca de interfaz de usuario proporciona notificaciones de llamadas entrantes. También puede usar Azure Communication Services como origen de eventos de Azure Event Grid para llamadas.

En este artículo, aprenderá a realizar llamadas individuales correctamente utilizando la biblioteca de interfaz de usuario en su aplicación.

Requisitos previos

Configuración de las características

Para más información, consulte la Biblioteca de interfaz de usuario de código abierto de Android y el código de aplicación de ejemplo.

Configuración de permisos para notificaciones push

Para configurar las notificaciones push, necesita una cuenta de Firebase con Firebase Cloud Messaging (FCM) habilitado. El servicio FCM debe estar conectado a una instancia de Azure Notification Hubs. Para más información, consulte Notificaciones de Communication Services. También debe usar Android Studio (versión 3.6 o una posterior) para compilar la aplicación.

Para que la aplicación Android reciba mensajes de notificación de FCM, necesita un conjunto de permisos. En su archivo AndroidManifest.xml, agregue el siguiente conjunto de permisos justo después de la etiqueta <manifest ...> o </application>.

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

Adición de notificaciones entrantes 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.

Registro o anulación del registro de las notificaciones push del centro de notificaciones

A fin de registrarse para recibir notificaciones push, la aplicación debe llamar a registerPushNotification() en una instancia de CallComposite con un token de registro de dispositivos.

Para obtener el token de registro del dispositivo, agregue el SDK de Firebase a la instancia build.gradle del módulo de su aplicación. Para recibir notificaciones de Firebase, integre Azure Notification Hubs siguiendo las instrucciones de Notificaciones de Communication Services.

    val deviceRegistrationToken = "" // From Firebase
    callComposite.registerPushNotification(deviceRegistrationToken).whenComplete { _, throwable ->
        if (throwable != null) {
            // Handle error
        }
    }

Control de las notificaciones push recibidas de Event Grid o del centro de notificaciones

Para recibir notificaciones push de llamadas entrantes, llame a handlePushNotification en una instancia de CallComposite con una carga.

Para obtener la carga de FMC, comience creando un nuevo servicio (Archivo>Nuevo>Servicio>Servicio) que extienda la clase del SDK de Firebase FirebaseMessagingService y sustituye al método onMessageReceived. Este método es el controlador de eventos al que se llama cuando FCM envía la notificación push a la aplicación.

    // On Firebase onMessageReceived
    val pushNotification = CallCompositePushNotification(remoteMessage.data)
    callComposite.handlePushNotification(pushNotification).whenComplete { _, throwable ->
        if (throwable != null) {
            // Handle error
        }
    }

Registro de notificaciones de llamadas entrantes

Para recibir notificaciones de llamadas entrantes después de handlePushNotification, suscríbase a CallCompositeIncomingCallEvent y CallCompositeIncomingCallCancelledEvent. CallCompositeIncomingCallEvent contiene la identificación y la información del autor de la llamada entrante. CallCompositeIncomingCallCancelledEvent contiene la identificación y el código de cancelación de la llamada Solución de problemas en Azure Communication Services.

    private var incomingCallEvent: IncomingCallEvent? = null
    private var incomingCallCancelledEvent: IncomingCallCancelledEvent? = null

    class IncomingCallEvent : CallCompositeEventHandler<CallCompositeIncomingCallEvent> {
        override fun handle(eventArgs: CallCompositeIncomingCallEvent?) {
            // Display incoming call UI to accept/decline a call
            // CallCompositeIncomingCallEvent contains call id and caller information
        }
    }

    class IncomingCallCancelledEvent : CallCompositeEventHandler<CallCompositeIncomingCallCancelledEvent> {
        override fun handle(eventArgs: CallCompositeIncomingCallCancelledEvent?) {
            // Call-ended event when a call is declined or not accepted
        }
    }

    // Event subscription
    incomingCallEvent = IncomingCallEvent()
    callComposite.addOnIncomingCallEventHandler(incomingCallEvent)

    incomingCallCancelledEvent = IncomingCallCancelledEvent()
    callComposite.addOnIncomingCallCancelledEventHandler(incomingCallEndEvent)

    // Event unsubscribe
    callComposite.removeOnIncomingCallEventHandler(incomingCallEvent)
    callComposite.removeOnIncomingCallCancelledEventHandler(incomingCallEndEvent)

Control de llamadas

Para aceptar llamadas, realice una llamada a accept. Para rechazar llamadas, realice una llamada a reject.

// Accept call
callComposite.accept(applicationContext, incomingCallId, localOptions)

// Decline call
callComposite.reject(incomingCallId)

Marcar a otros participantes

Para iniciar una llamada con otros participantes, cree CallCompositeStartCallOptions con la identificación sin procesar de los participantes de CommunicationIdentity y launch.

    val participants: List<CommunicationIdentifier> // participants to dial
    callComposite.launch(context, participants, localOptions)

Para más información, consulte la Biblioteca de interfaz de usuario de código abierto de iOS y el código de aplicación de ejemplo.

Configurar notificaciones de inserción

Una notificación de inserción en el dispositivo móvil es la notificación emergente que recibe en el dispositivo móvil. Este artículo se centra en las notificaciones push de las llamadas de voz sobre IP (VoIP).

En las secciones siguientes se describe cómo registrarse, controlar y anular el registro de las notificaciones de inserción. Antes de iniciar estas tareas, complete estos requisitos previos:

  1. En Xcode, vaya a Signing & Capabilities (Firma y funcionalidades). Para agregar una funcionalidad, seleccione + Capability (+ Funcionalidad) y, a continuación, seleccione Push Notifications (Notificaciones de inserción).
  2. Para agregar otra funcionalidad, seleccione + Capability (+ Funcionalidad) y, a continuación, seleccione Background Modes (Modos en segundo plano).
  3. En Background Modes (Modos en segundo plano), seleccione las casillas Voice over IP (Voz sobre IP) y Remote notifications (Notificaciones remotas).

Adición de notificaciones entrantes 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.

Registro o anulación del registro de las notificaciones push del centro de notificaciones

A fin de registrarse para recibir notificaciones push, la aplicación debe llamar a registerPushNotifications() en una instancia de CallComposite con un token de registro de dispositivos.

    // to register
    let deviceToken: Data = pushRegistry?.pushToken(for: PKPushType.voIP)
    callComposite.registerPushNotifications(
        deviceRegistrationToken: deviceToken) { result in
        switch result {
            case .success:
                // success
            case .failure(let error):
                // failure
        }
    }

    // to unregister
    callComposite.unregisterPushNotification()

Control de las notificaciones push recibidas de Event Grid o del centro de notificaciones

Para recibir notificaciones de inserción de llamadas entrantes, llame a handlePushNotification() en una instancia de CallComposite con una carga de diccionario.

Cuando usa handlePushNotification() y las opciones de CallKit están configuradas, recibe una notificación de CallKit para aceptar o rechazar llamadas.

    // App is in the background
    // push notification contains from/to communication identifiers and event type
    let pushNotification = PushNotification(data: payload.dictionaryPayload)
    let callKitOptions = CallKitOptions(...//CallKit options)
    CallComposite.reportIncomingCall(pushNotification: pushNotification,
                                    callKitOptions: callKitOptions) { result in
        if case .success() = result {
            DispatchQueue.global().async {
                // You don't need to wait for a Communication Services token to handle the push because 
                // Communication Services common receives a callback function to get the token with refresh options
                // create call composite and handle push notification
                callComposite.handlePushNotification(pushNotification: pushNotification)
            }
        }
    }

    // App is in the foreground
    let pushNotification = PushNotification(data: dictionaryPayload)
    callComposite.handlePushNotification(pushNotification: pushNotification) { result in
        switch result {
            case .success:
                // success
            case .failure(let error):
                // failure
        }
    }

Registro de notificaciones de llamadas entrantes en la inserción de identificadores

Para recibir notificaciones de llamadas entrantes después de handlePushNotification, suscríbase a onIncomingCall y onIncomingCallCancelled. IncomingCall contiene la identificación y la información del autor de la llamada entrante. IncomingCallCancelled contiene la identificación y el código de cancelación de la llamada Solución de problemas en Azure Communication Services.

    let onIncomingCall: (IncomingCall) -> Void = { [] incomingCall in
        // Incoming call id and caller info
    }
    let onIncomingCallEnded: (IncomingCallCancelled) -> Void = { [] incomingCallCancelled in
        // Incoming call cancelled code with callId
    }
    callComposite.events.onIncomingCall = onIncomingCall
    callComposite.events.onIncomingCallEnded = onIncomingCallEnded

Deshabilitación del envío de cambios interno de las llamadas entrantes

Para recibir notificaciones push solo desde EventGrid y APNS establezca disableInternalPushForIncomingCall en true en CallCompositeOptions. Si disableInternalPushForIncomingCall es true, el evento de notificaciones push de la biblioteca de interfaz de usuario solo se recibe cuando se llama a handlePushNotification. La opción disableInternalPushForIncomingCall ayuda a dejar de recibir notificaciones de CallComposite en modo de primer plano. Esta configuración no controla las opciones EventGrid y NotificationHub.

    let options = CallCompositeOptions(disableInternalPushForIncomingCall: true)

Inicio de la composición en una llamada entrante aceptada desde la llamada SDK CallKit

El SDK de Llamadas de iOS de Azure Communication Services admite la integración de CallKit. Puede habilitar esta integración en la biblioteca de interfaz de usuario configurando una instancia de CallCompositeCallKitOption. Para obtener más información, consulte Integración con CallKit.

Suscríbase a onIncomingCallAcceptedFromCallKit si CallKit desde el SDK de llamada está habilitado. En la llamada aceptada, inicie callComposite con el identificador de llamada.

    let onIncomingCallAcceptedFromCallKit: (callId) -> Void = { [] callId in
        // Incoming call accepted call id
    }
    
    callComposite.events.onIncomingCallAcceptedFromCallKit = onIncomingCallAcceptedFromCallKit

    // launch composite with/without local options
    // Note: as call is already accepted, setup screen will not be displayed
    callComposite.launch(callIdAcceptedFromCallKit: callId)

Control de llamadas con CallComposite

Para aceptar llamadas, realice una llamada a accept. Para rechazar llamadas, realice una llamada a reject.

// Accept call
callComposite.accept(incomingCallId, 
                     ... // CallKit and local options
                     )

// Decline call
callComposite.reject(incomingCallId)

Marcar a otros participantes

Para iniciar llamadas con otros participantes, inicie callComposite con la lista de participantes de CommunicationIdentifier.

    // [CommunicationIdentifier]
    // use createCommunicationIdentifier(fromRawId: "raw id")
    callComposite.launch(participants: <list of CommunicationIdentifier>,
                         localOptions: localOptions)

Pasos siguientes