Integrar o CallKit à biblioteca de interface do usuário
A Biblioteca de Interface do Usuário dos Serviços de Comunicação do Azure fornece suporte pronto para uso para o CallKit. Os desenvolvedores podem fornecer sua própria configuração para o CallKit ser usado na Biblioteca de Interface do Usuário.
Nesse artigo, você aprende como configurar o CallKit corretamente usando a UI Library em seu aplicativo.
Pré-requisitos
- Um dispositivo físico iOS. Um simulador do iOS não dá suporte à funcionalidade do CallKit.
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Um recurso dos Serviços de Comunicação implantado. Crie um recurso dos Serviços de Comunicação.
- Um token de acesso do usuário para habilitar o cliente de chamada. Obter um token de acesso do usuário.
- Opcional: Conclusão do Início Rápido para introdução às composições da Biblioteca de Interface do Usuário.
Para obter mais informações, veja a Biblioteca de UI do iOS de código aberto e o código de aplicativo de amostra.
Configurar a integração do CallKit
O SDK do iOS para chamadas dos Serviços de Comunicação do Azure dá suporte à integração com o CallKit. Você pode habilitar essa integração na Biblioteca da Interface do Usuário configurando uma instância de CallCompositeCallKitOption
. Para obter mais informações, consulte Integrar com o CallKit.
Especificar as informações do destinatário da chamada para chamadas de saída
Para especificar as informações da chamada de saída, crie uma instância de CallKitRemoteInfo
. Se você não fornecer CallKitRemoteInfo
, o valor bruto do identificador do participante será exibido por padrão.
Atribua um valor para displayName
personalizar o nome de exibição do chamador. O valor especificado em CallKitRemoteInfo
é exatamente como ele aparece no log de chamadas discado pela última vez.
Atribua também o valor cxHandle
. É o que o aplicativo recebe quando o usuário liga de volta nesse contato.
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)
Especificar as informações do destinatário da chamada para chamadas de entrada
Para especificar informações de chamadas de entrada, crie uma instância de CallKitOptions
. Se você não fornecer CallKitOptions
, o valor bruto do identificador do participante será exibido por padrão.
Atribua um valor para provideRemoteInfo
personalizar o nome de exibição do chamador. O valor especificado em CallKitRemoteInfo
é exatamente como ele aparece no log de chamadas discado pela última vez.
Atribua também o valor cxHandle
. É o que o aplicativo recebe quando o usuário liga de volta nesse contato.
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 provedores
Conforme necessário, forneça uma instância de CXProviderConfiguration
para CallKitOptions
. Para obter mais informações, consulte a documentação do desenvolvedor da Apple sobre o CXProviderConfiguration.
let providerConfig = CXProviderConfiguration()
providerConfig.supportsVideo = true
providerConfig.maximumCallGroups = 1
providerConfig.maximumCallsPerCallGroup = 1
providerConfig.includesCallsInRecents = true
providerConfig.supportedHandleTypes = [.phoneNumber, .generic]
Configurar um dispositivo de áudio
Configure uma sessão de áudio a ser chamada antes de colocar ou aceitar a chamada de entrada e antes de retomar uma chamada em espera. Para obter mais informações, consulte a documentação do desenvolvedor da Apple sobre o 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
}
Habilitar o CallKit
Para habilitar um CallKit, crie uma instância de CallKitOptions
e forneça-a para 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
)
Manter e retomar a API do CallKit integrado ao aplicativo
Para o CallKit integrado ao aplicativo, use hold
e resume
para gerenciar o estado de chamada.
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
}
}