[ios] CallKit을 활용한 전화 UI 개발 방법

iOS 애플리케이션을 개발하다 보면 전화 관련 기능을 구현해야 할 때가 있습니다. CallKit은 iOS에서 전화 앱과 상호 작용할 수 있는 프레임워크로, 전화 기능을 앱에 통합할 수 있도록 도와줍니다. 이번 글에서는 CallKit을 활용하여 iOS 애플리케이션에 전화 UI를 개발하는 방법에 대해 알아보겠습니다.

1. CallKit 소개

CallKit은 iOS 10 이상에서 제공되는 프레임워크로, VoIP(음성 통화) 앱을 다른 전화 응용 프로그램과 통합할 수 있게 해줍니다. 이를 통해 사용자는 앱에서 수신하거나 발신한 전화를 기존 전화 앱과 마찬가지로 처리할 수 있습니다.

2. CallKit을 이용한 전화 UI 구현 방법

2.1 CallKit 설정

먼저, Xcode 프로젝트에 CallKit 프레임워크를 추가해야 합니다. 프로젝트 타겟의 General 탭에서 Linked Frameworks and Libraries에 CallKit을 추가합니다.

2.2 Call Directory Extension 구현

Call Directory Extension을 사용하여 전화 앱에서 통화 차단 및 신원 식별과 같은 기능을 제공할 수 있습니다. 이를 위해 CXCallDirectoryProvider를 구현하고, 악의적인 차단 리스트가 아닌 유효한 차단 리스트를 제공해야 합니다.

import CallKit

class CallDirectoryHandler: CXCallDirectoryProvider {
    override func beginRequest(with context: CXCallDirectoryExtensionContext) {
        // 차단할 전화번호 등록
        let phoneNumbers = [CXCallDirectoryPhoneNumber(1234567890)]
        for phoneNumber in phoneNumbers {
            context.addBlockingEntry(withNextSequentialPhoneNumber: phoneNumber)
        }
        
        context.completeRequest()
    }
}

2.3 통화 UI 통합

CallKit을 사용하여 앱에 통화 UI를 통합하려면 CXProvider 및 CXCallUpdate를 활용해야 합니다. 각각은 앱의 통화 서비스를 관리하고 UI를 구성하는 데 필요한 메서드를 제공합니다.

import CallKit

class CallManager: NSObject, CXProviderDelegate {
    let provider: CXProvider
    let callController: CXCallController
    
    override init() {
        provider = CXProvider(configuration: CXProviderConfiguration(localizedName: "My App"))
        callController = CXCallController()
        
        super.init()
        
        provider.setDelegate(self, queue: nil)
    }
    
    func reportIncomingCall() {
        let update = CXCallUpdate()
        update.remoteHandle = CXHandle(type: .phoneNumber, value: "1234567890")
        provider.reportNewIncomingCall(with: UUID(), update: update) { error in
            // 처리 완료
        }
    }
    
    // Delegate methods
    func providerDidReset(_ provider: CXProvider) {
        // 리셋 처리
    }
    
    // 다른 Delegate 메서드 구현
}

위의 예제에서는 통화가 수신되었을 때 reportIncomingCall() 메서드를 호출하여 통화 UI를 통합하는 방법을 보여줍니다.

3. 결론

CallKit을 사용하면 iOS 애플리케이션에 전화 기능을 쉽게 통합할 수 있습니다. 전화 앱과의 연동이 가능하며, 사용자 경험을 향상시키는 데 도움이 됩니다.

이상으로 CallKit을 활용한 전화 UI 개발 방법에 대해 알아보았습니다. 감사합니다.

참고 자료