次の方法で共有


CallKit を UI ライブラリに統合する

Azure Communication Services UI ライブラリには、CallKit をすぐに利用するためのサポートが用意されています。 開発者は、UI ライブラリで使用する CallKit 用の独自の構成を提供できます。

この記事では、アプリケーションで UI ライブラリを使用することで CallKit を正しく設定する方法を学習します。

前提条件

詳細については、オープンソースの 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 に対しては 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
        }
    }

次のステップ