다음을 통해 공유


UI 라이브러리에 CallKit 통합

Azure Communication Services UI 라이브러리는 CallKit에 대한 기본 지원을 제공합니다. 개발자는 UI 라이브러리에 사용할 CallKit에 대한 자체 구성을 제공할 수 있습니다.

이 문서에서는 애플리케이션에서 UI 라이브러리를 사용하여 CallKit을 올바르게 설정하는 방법을 알아봅니다.

필수 조건

자세한 내용은 오픈 소스 iOS UI 라이브러리샘플 애플리케이션 코드를 참조하세요.

CallKit 통합 설정

Azure Communication Services 통화 iOS SDK는 CallKit 통합을 지원합니다. CallCompositeCallKitOption 인스턴스를 구성하여 UI 라이브러리에서 이 통합을 사용하도록 설정할 수 있습니다. 자세한 내용은 CallKit과 통합을 참조하세요.

발신 통화 수신자 정보 지정

발신 전화 정보를 지정하려면 CallKitRemoteInfo의 인스턴스를 만듭니다. CallKitRemoteInfo를 제공하지 않으면 참가자 식별자의 원시 값이 기본 값으로 표시됩니다.

발신자의 표시 이름을 사용자 지정하려면 displayName에 값을 할당합니다. CallKitRemoteInfo에 지정된 값은 마지막으로 전화를 건 통화 로그에 표시되는 방식과 정확히 같습니다.

또한 cxHandle 값을 할당합니다. 이것은 사용자가 해당 연락처로 다시 전화를 걸 때 애플리케이션이 수신하는 값입니다.

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)

수신 전화에 대한 통화 수신자 정보 지정

수신 전화 발신자 정보를 지정하려면 CallKitOptions의 인스턴스를 만듭니다. CallKitOptions를 제공하지 않으면 참가자 식별자의 원시 값이 기본 값으로 표시됩니다.

발신자의 표시 이름을 사용자 지정하려면 provideRemoteInfo에 값을 할당합니다. CallKitRemoteInfo에 지정된 값은 마지막으로 전화를 건 통화 로그에 표시되는 방식과 정확히 같습니다.

또한 cxHandle 값을 할당합니다. 이것은 사용자가 해당 연락처로 다시 전화를 걸 때 애플리케이션이 수신하는 값입니다.

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
}

공급자 구성

필요에 따라 CXProviderConfiguration 인스턴스를 CallKitOptions에 제공합니다. 자세한 내용은 CXProviderConfiguration에 대한 Apple 개발자 설명서를 참조하세요.

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

오디오 세션 구성

전화를 걸거나 걸려오는 전화를 받기 전과 보류 중인 통화를 다시 시작하기 전에 오디오 세션 구성이 호출됩니다. 자세한 내용은 AVAudioSession에 대한 Apple 개발자 설명서를 참조하세요.

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
}

CallKit 사용 설정

CallKit을 사용하도록 설정하려면 CallKitOptions 인스턴스를 만들어서 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
)

애플리케이션에 통합된 CallKit용 보류 및 다시 시작 API

애플리케이션에 통합된 CallKit의 경우 holdresume을 사용하여 통화 상태를 관리합니다.

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

다음 단계