你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将 CallKit 集成到 UI 库中
Azure 通信服务 UI 库为 CallKit 提供现式支持。 开发人员可提供自己的配置,便于 CallKit 用于 UI 库。
在本文中,了解如何在应用程序中使用 UI 库正确设置 CallKit。
先决条件
- 物理 iOS 设备。 iOS 模拟器不支持 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
}
}