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
- Un dispositivo iOS físico. Un simulador de iOS no admite la funcionalidad CallKit.
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- Un recurso de Communication Services implementado. Cree un recurso de Communication Services.
- Un token de acceso de usuario para habilitar el cliente de llamada. Obtenga un token de acceso de usuario.
- Opcional: Realización del inicio rápido para empezar a trabajar con los compuestos de la Biblioteca de interfaz de usuario.
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
}
}