共用方式為


將 CallKit 整合到 UI 程式庫中

Azure 通訊服務 UI 程式庫提供現成的 CallKit 支援。 開發人員可提供其本身的設定,讓 CallKit 用於 UI 程式庫。

在本文中,您將了解如何在應用程式中使用 UI 程式庫正確設定 CallKit。

必要條件

如需詳細資訊,請參閱開放原始碼 iOS UI 程式庫範例應用程式程式碼

設定 CallKit 整合

Azure 通訊服務通話 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
        }
    }

下一步