Compartir a través de


Integración de CallKit en la biblioteca de interfaz de usuario

La biblioteca de interfaz de usuario de Azure Communication Services proporciona compatibilidad integrada con CallKit. Los desarrolladores pueden proporcionar su propia configuración para usar CallKit para la biblioteca de interfaz de usuario.

En este artículo, aprenderá a configurar CallKit correctamente mediante la biblioteca de interfaz de usuario de la aplicación.

Requisitos previos

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.

Configuración de la integración de 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.

Especificación de la información del destinatario de la llamada para las llamadas salientes

Para especificar la información de llamada saliente, cree una instancia de CallKitRemoteInfo. Si no proporciona CallKitRemoteInfo, el valor sin procesar del identificador del participante se muestra de forma predeterminada.

Asigne un valor para displayName para personalizar el nombre para mostrar del autor de la llamada. El valor especificado en CallKitRemoteInfo es exactamente cómo aparece en el registro de llamadas de última marcación.

Asigne también el valor cxHandle. Es lo que recibe la aplicación cuando el usuario vuelve a llamar a ese contacto.

let cxHandle = CXHandle(type: .generic, value: "VALUE_TO_CXHANDLE")
let callKitRemoteInfo = CallKitRemoteInfo(displayName: "DISPLAY_NAME", handle: cxHandle)
callComposite.launch(..., // Locator for Azure Communication Service
                     callKitRemoteInfo: callKitRemoteInfo)

Especificación de la información del destinatario de la llamada para las llamadas entrantes

Para especificar la información del llamador de llamada entrante, cree una instancia de CallKitOptions. Si no proporciona CallKitOptions, el valor sin procesar del identificador del participante se muestra de forma predeterminada.

Asigne un valor para provideRemoteInfo para personalizar el nombre para mostrar del autor de la llamada. El valor especificado en CallKitRemoteInfo es exactamente cómo aparece en el registro de llamadas de última marcación.

Asigne también el valor cxHandle. Es lo que recibe la aplicación cuando el usuario vuelve a llamar a ese contacto.

public func incomingCallRemoteInfo(info: Caller) -> CallKitRemoteInfo {
    let cxHandle = CXHandle(type: .generic, value: "VALUE_TO_CXHANDLE")
    var remoteInfoDisplayName = "DISPLAY_NAME"
    let callKitRemoteInfo = CallKitRemoteInfo(displayName: remoteInfoDisplayName,
                                                            handle: cxHandle)
    return callKitRemoteInfo
}

Configurar proveedores

Según sea necesario, proporcione una instancia de CXProviderConfiguration para CallKitOptions. Para obtener más información, consulte la Documentación para desarrolladores de Apple sobre CXProviderConfiguration.

let providerConfig = CXProviderConfiguration()
providerConfig.supportsVideo = true
providerConfig.maximumCallGroups = 1
providerConfig.maximumCallsPerCallGroup = 1
providerConfig.includesCallsInRecents = true
providerConfig.supportedHandleTypes = [.phoneNumber, .generic]

Configuración de una sesión de audio

Configure una sesión de audio a la que se llamará antes de hacer o aceptar la llamada entrante y antes de reanudar una llamada en espera. Para obtener más información, consulte la Documentación para desarrolladores de Apple sobre AVAudioSession.

public func configureAudioSession() -> Error? {
    let audioSession = AVAudioSession.sharedInstance()
    let options: AVAudioSession.CategoryOptions = .allowBluetooth
    var configError: Error?
    do {
        try audioSession.setCategory(.playAndRecord)
    } catch {
        configError = error
    }
    return configError
}

Habilitación de CallKit

Para habilitar CallKit, cree una instancia de CallKitOptions y proporciónela a callCompositeOptions.

let isCallHoldSupported = true // enable call hold (default is true)
let callKitOptions = CallKitOptions(
    providerConfig: providerConfig,
    isCallHoldSupported: isCallHoldSupported,
    provideRemoteInfo: provideRemoteInfo,
    configureAudioSession: configureAudioSession
)

let options = CallCompositeOptions(
    ..., // Other options for Azure Communication Service
    callKitOptions: callKitOptions
)

API Hold and Resume de CallKit integrada en la aplicación

En el caso de CallKit integrado en la aplicación, use hold y resume para administrar el estado de llamada.

    callComposite.hold() { result in
        switch result {
            case .success:
                // success
            case .failure(let error):
                // failure
        }
    }

    callComposite.resume() { result in
        switch result {
            case .success:
                // success
            case .failure(let error):
                // failure
        }
    }

Pasos siguientes