CallKit を UI ライブラリに統合する
Azure Communication Services UI ライブラリには、CallKit をすぐに利用するためのサポートが用意されています。 開発者は、UI ライブラリで使用する CallKit 用の独自の構成を提供できます。
この記事では、アプリケーションで UI ライブラリを使用することで CallKit を正しく設定する方法を学習します。
前提条件
- 物理的な iOS デバイス iOS シミュレーターは CallKit 機能をサポートしていません。
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- デプロイ済みの Communication Services リソース。 Communication Services リソースを作成します。
- 通話クライアントを有効にするためのユーザー アクセス トークン。 ユーザー アクセス トークンを取得します。
- 省略可能: 「UI ライブラリ コンポジットの使用を開始するためのクイックスタート」の完了。
詳細については、オープンソースの iOS UI ライブラリ とサンプル アプリケーション コードを参照してください。
CallKit の統合を設定する
Azure Communication Services Calling 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 用の Hold and Resume 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
}
}