Compartilhar via


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

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

Próximas etapas