將 CallKit 整合到 UI 程式庫中
Azure 通訊服務 UI 程式庫提供現成的 CallKit 支援。 開發人員可提供其本身的設定,讓 CallKit 用於 UI 程式庫。
在本文中,您將了解如何在應用程式中使用 UI 程式庫正確設定 CallKit。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- 已部署通訊服務資源。 建立通訊服務資源。
- 用來啟用通話用戶端的使用者存取權杖。 取得使用者存取權杖。
- 選擇性:完成開始使用 UI 程式庫複合的快速入門。
如需詳細資訊,請參閱開放原始碼 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,請使用 hold
和 resume
來管理通話狀態。
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
}
}